我在我的java bean中使用\ n,并且控制台中的变量输出正确显示。虽然从bean获取此值到JSF \ n似乎不起作用....... 任何人都可以建议我如何在JSF中工作。
答案 0 :(得分:17)
最简单的方法是在包含您要保留换行符\n
字符的文本的父元素上应用CSS white-space: pre
。鉴于这个CSS样式类:
.preformatted {
white-space: pre;
}
您可以按如下方式应用:
<div class="preformatted">#{bean.text}</div>
或
<h:panelGroup layout="block" styleClass="preformatted">#{bean.text}</h:panelGroup>
或
<h:outputText value="#{bean.text}" styleClass="preformatted" />
等
此样式属性也正是默认使用<textarea>
元素的方式。您也可以通过设置disabled="true"
或readonly="true"
来使用它并使其无法使用。
<h:inputTextarea value="#{bean.text}" disabled="true" />
您当然也可以用HTML \n
元素替换所有出现的<br/>
。这样,您可以在不使用white-space: pre
和/或不是<textarea>
元素的元素中显示它。其中一种方法是使用fn:replace()
。
<h:outputText value="#{fn:replace(bean.text,'\\n','<br/>')}" escape="false" />
这只是IMO,而不是white-space: pre
。
答案 1 :(得分:5)
在将值发送到<br/>
之前,您应该将所有\ n替换为<h:inputTextarea>
。
Html使用<br/>
进行换行,而不是使用\ n就像java。
另外,您应该将escape="false"
添加到<h:outputText
(几乎可以肯定......)。
答案 2 :(得分:2)
在显示\n
之前将所有</br>
替换为{{1}}。
答案 3 :(得分:1)
当通过<h:inputTextarea>
查看我的数据库中记录的文本时,我发现特殊字符被保留。
因此,在调查了我认为是一些黑暗的持久性艺术之后,我意识到JSF组件的默认显示实际上是让我失望的原因。
我很快发现在我的样式表上向white-space: pre-wrap;
添加<p>
修复了我的<h:outputText>
标记的问题,这些标记是从JPA pojo提供的文本。
在我的情况下,我需要pre-wrap
而不是pre
,因为pre
是按字符包装而不是按字词包装。
希望这有助于某人!
答案 4 :(得分:0)
我使用以下方法解决了它
inputtextarea
,用户可以在其中提供多行说明。在将其保存到数据库之前,我已将新行替换为分支String fpDescriptionCombined = fpDescription.replaceAll("(\r\n|\n)", "<br />");
String finalStr = splitStr.replaceAll("<br />", "\n");
.showLineBreak {
white-space: pre;
}
<h:outputText value="${templateListController.getFlowPointDescriptionForTab(eachFPType)}" style="display:block;width:860px;" styleClass="showLineBreak" />