如何使用<h:inputtextarea> </h:inputtextarea>

时间:2012-03-30 11:58:53

标签: java jsf

我在我的java bean中使用\ n,并且控制台中的变量输出正确显示。虽然从bean获取此值到JSF \ n似乎不起作用....... 任何人都可以建议我如何在JSF中工作。

5 个答案:

答案 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','&lt;br/&gt;')}" 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)

我使用以下方法解决了它

  1. 声明inputtextarea,用户可以在其中提供多行说明。在将其保存到数据库之前,我已将新行替换为分支
  2. String fpDescriptionCombined = fpDescription.replaceAll("(\r\n|\n)", "<br />");
    
    1. 在屏幕显示期间,我再次将分支替换为新行
    2. String finalStr = splitStr.replaceAll("<br />", "\n");
      
      1. 在屏幕上,我使用了上面提到的CSS
      2. .showLineBreak {
           white-space: pre;
         }
        
        <h:outputText value="${templateListController.getFlowPointDescriptionForTab(eachFPType)}" style="display:block;width:860px;" styleClass="showLineBreak" />
        
        1. 我必须这样做,因为我的描述可以通过csv导出/导入。因此,如果处理不当,添加多行描述将被视为新记录