Pel*_*zon 48 jsf line-breaks output
我在String
变量中有一些文本,其中包含回车符和新行\r\n
.
text = "Text1\r\nText2\r\nText3";
Run Code Online (Sandbox Code Playgroud)
我用它来呈现它<h:outputtext>
.
<h:outputText value="#{bean.text}" />
Run Code Online (Sandbox Code Playgroud)
但它无法识别新的行字符,并在webbrowser中显示如下.
Text1 Text2 Text3
为什么不<h:outputText>
打破\n
新线?
我该怎么办?我一定要更换\n
有<br />
?
Bal*_*usC 104
HTML中的换行符由<br />
元素表示,而不是由\n
字符表示.更重要的是,通过右键单击打开普通HTML源代码,在浏览器中查看源代码,您将"看到" \n
所有地方.但是,它们不会在最终的HTML演示文稿中显示.只有<br />
意志.
所以,是的,你需要替换它们<br />
.
<h:outputText value="#{fn:replace(bean.text,'\n','<br/>')}" escape="false" />
Run Code Online (Sandbox Code Playgroud)
注意:使用Apache EL而不是Oracle EL时,请将斜杠双重转义为\\n
.
然而,如果值来自最终用户输入并且您事先没有对其进行清理,则会Failed to parse the expression with root cause org.apache.el.parser.ParseException: Encountered <ILLEGAL_CHARACTER>
使其对XSS攻击敏感.更好的选择是继续使用并将CSS 属性设置为在父元素上预先格式化.如果您想在行元素的上下文中包含行,则设置.或者,如果您想要折叠空格和制表符,请设置.escape="false"
\n
white-space
pre-wrap
例如
<h:outputText value="#{fn:replace(bean.text,'\\n','<br/>')}" escape="false" />
Run Code Online (Sandbox Code Playgroud)
<h:outputText value="#{bean.text}" styleClass="preformatted" />
Run Code Online (Sandbox Code Playgroud)
Jör*_*ann 11
这是正常行为,在HTML连续空格(如空格和换行符)中进行了规范化,因此它只显示为单个空格.如果直接在HTML源中包含带有换行符的文本,则会显示相同的显示.要在输出中保证换行符,您必须将文本包装在pre
标记中或应用样式表类:
<pre><h:outputText value="..."/></pre>
<div style="white-space: pre-wrap"><h:outputText value="..."/></div>
Run Code Online (Sandbox Code Playgroud)
有关white-space
属性的其他可能值,请查看此页面:http://www.w3schools.com/cssref/pr_text_white-space.asp
以前的答案给我带来了大量文本的问题,比如极宽的输出(没有文本换行),style="white-space: pre-wrap"
但没有修复; 或者它只是显示<br/>
为文本,而不是行结尾.
最后,我使用该h:inputTextarea
组件显示文本,并使其"只读",直接工作而不替换换行符,也不必使用额外的样式或styleClasses.并且,它可以调整以适应用户的需求,这是一个奖励.
<h:inputTextarea cols="70" rows="10" readonly="true" value="#{bean.text}" />
Run Code Online (Sandbox Code Playgroud)
对于少量文本,我发现pre-wrap
上面的henko建议的选项可以很好地运行.
归档时间: |
|
查看次数: |
71665 次 |
最近记录: |