Самый простой способ - применить CSS white-space: pre
к родительскому элементу, содержащему текст, для которого вы хотите сохранить символы новой строки \n
. Учитывая этот класс стиля 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" />
Конечно, вы также можете заменить все вхождения \n
на элемент HTML <br/>
. Таким образом, вы можете отобразить его в элементе, который не использует white-space: pre
и / или не является элементом <textarea>
. Одним из способов является использование fn:replace()
.
<h:outputText value="#{fn:replace(bean.text,'\\n','<br/>')}" escape="false" />
Это ИМО только страшнее, чем white-space: pre
.