как заставить \ n работать в - PullRequest
5 голосов
/ 30 марта 2012

Я использую \ n в моем Java-бине, и вывод переменной в консоли отображается правильно.Принимая во внимание, что при извлечении этого значения из bean-компонента в JSF \ n, похоже, не работает ....... может кто-нибудь подсказать мне, как заставить \ n работать в JSF.

Ответы [ 5 ]

17 голосов
/ 30 марта 2012

Самый простой способ - применить 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','&lt;br/&gt;')}" escape="false" />

Это ИМО только страшнее, чем white-space: pre.

5 голосов
/ 30 марта 2012

Вы должны заменить все \ n на <br/> перед отправкой значения в <h:inputTextarea>.

HTML использует <br/> для разрыва строки, а не \ n как java.

Кроме того, вы должны добавить escape="false" к вашему <h:outputText (почти наверняка ...).

2 голосов
/ 30 марта 2012

Замените все вхождения \n на </br> перед его отображением.

1 голос
/ 09 февраля 2013

При просмотре текста, записанного в моей базе данных через <h:inputTextarea>, я обнаружил, что специальные символы сохраняются.

Таким образом, после изучения того, что я считал каким-то мрачным искусством настойчивости, я понял, что отображение компонента JSF по умолчанию на самом деле меня подводило.

Вскоре я обнаружил, что добавление white-space: pre-wrap; к <p> в моей таблице стилей исправило эту проблему для моих <h:outputText> тегов, которые снабжались текстом из JPA pojo.

В моем случае мне нужно было pre-wrap, а не pre, потому что pre заключалось в перенос по символам, а не по словам.

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 27 марта 2018

Я решил это, используя следующий метод

  1. Объявите inputtextarea, где пользователь может предоставить многострочное описание.Перед сохранением в базу данных я заменил новую строку на ветку
String fpDescriptionCombined = fpDescription.replaceAll("(\r\n|\n)", "<br />");
Во время показа на экране я снова заменил ветку на новую строку
String finalStr = splitStr.replaceAll("<br />", "\n");
На экране я использовал вышеупомянутый CSS
.showLineBreak {
   white-space: pre;
 }
<h:outputText value="${templateListController.getFlowPointDescriptionForTab(eachFPType)}" style="display:block;width:860px;" styleClass="showLineBreak" />
Я должен был сделать это, потому что мое описание можно экспортировать / импортировать через CSV.Таким образом, добавление многострочного описания будет рассматриваться как новая запись, если не обрабатываться должным образом
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...