【发布时间】:2017-07-05 07:04:36
【问题描述】:
我有一个使用 JSF h:inputTextarea 的表单,如下所示:
index.xhtml:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head></h:head>
<h:body>
<div id="ContentFrame">
<h:form enctype="multipart/form-data">
<h:inputTextarea
id="termineesText"
value="#{controller.text}"/>
<h:commandButton
value="Upload and Continue"
type = "submit"
action="#{controller.respond}"/>
</h:form>
</div>
</h:body>
</html>
结果.xhtml:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head></h:head>
<h:body>
<div id="ContentFrame">
<h:form enctype="multipart/form-data">
<h:inputTextarea
id="termineesText"
value="#{controller.text}"/>
<h:outputText value="#{controller.containsNewline}"/>
</h:form>
</div>
</h:body>
</html>
使用这个支持 bean:
controller.java:
package main;
import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
@Named("controller")
@SessionScoped
public class Controller implements Serializable {
private static final long serialVersionUID = 1L;
private String text;
private boolean containsNewline = false;
public String respond() {
return "result.xhtml";
}
public void setText(String value) {
if (value.contains("\n") || value.contains("\r")) {
containsNewline = true;
}
text = value;
}
public String getText() {return text;}
public String getContainsNewline()
{
return String.valueOf(containsNewline);
}
}
当用户输入多行文本(按回车键)并提交表单时,result.xhtml 的文本区域中的换行符会消失。例如,如果用户输入:
abc
abc
result.xhtml 的文本区域为“abcabc”,输出文本计算为false。当表单提交到服务器时,换行符似乎会丢失,这可以使用控制器中的 containsNewLine 布尔值来查看。
我已经阅读了很多关于为什么当文本来自服务器端时 Web 浏览器上没有显示换行符的帖子,但我的情况是相反的,由于某种原因,新行没有从 Textarea 转移到支持 bean。
我尝试过的
我试过了:
<pre><h:inputTextarea id="termineesText" styleClass="termineesTextInput" onchange="enableDisableSubmitBtn()" value="#{controller.termineesText}"/></pre>
在 CSS 中:
.termineesTextInput { white-space: pre; }
我正在使用的技术
JSF 2.2 和 CDI 1.2 在 Websphere Application Server 上运行,我使用 Chrome 隐身窗口完成了大部分测试。
如何让换行符转移到支持属性?
【问题讨论】:
-
英语以具有多种含义的单词和表达而闻名,因此我认为大写字母可能会被解释为挫败感。不需要反对票。从来没有...编辑过。
-
Downvote 不是我的...但是谢谢...将删除我的评论。但是这个问题不是 java-se(你不能只在一个带有 main 的 pojo 中重现它),它不是 java-ee(一个很少使用的标签和广泛的方式)虽然是的,jsf 是其中的一部分。它与 CSS 无关。 CSS 在从输入向服务器提交数据时不发挥任何作用。添加不相关或广泛的标签主要会吸引不相关的 cmets/建议/答案。这就是我删除它们(并再次删除它们)的原因......干杯。
-
你能试试当你删除'multipart/form-data'和显式类型属性时会发生什么吗?
-
好的,谢谢,删除 'enctype' 属性会在表单提交时产生 Servlet 错误,不确定“显式类型属性”是什么意思?
-
如果您仅使用此表单时出现提交错误,则您遇到了一些在此代码中不可见的完全不同的问题。您确定这是该页面的最小版本吗?对于显式类型,我的意思是
type="post"...