Ответ 1
В теории вам нужен атрибут escape
для компонента h:messages
, например, h:outputText
. Вы не единственный, кто этого хочет, это запрашивается раньше, чем часто, но это WONTFIX в соответствии с ребятами из JSF.
У вас есть несколько вариантов:
-
Используйте
\n
вместо<br>
и примените CSS соответственно (проще всего).#messages td { white-space: pre; }
-
Создайте настраиваемый рендерер, который расширяет
MessageRenderer
(бит сложнее, но приятно, если вы хотите покрыть больше HTML, чем только разрывы строк). -
Соберите сообщения самостоятельно в
List
в bean и покажите их с помощью<t:dataList>
или когда вы 'уже используют Facelets вместо JSP, используя<ui:repeat>
. Таким образом вы можете использовать<h:outputText escape="false">
для отображения отдельных сообщений. -
Или, когда вы уже находитесь на JSF 2.0, просто перейдите по
FacesContext#getMessageList()
самостоятельно. Каждый элемент дает вамFacesMessage
назад, который, в свою очередь, предлагает несколько геттеров. Затем вы можете отобразить сводку в<h:outputText escape"false" />
.<ul> <ui:repeat value="#{facesContext.messageList}" var="facesMessage"> <li> <h:outputText value="#{facesMessage.summary}" escape="false" /> </li> </ui:repeat> </ul>
-
Или, когда вы используете библиотечную утилиту JSF OmniFaces, используйте
<o:messages>
компонент, который поддерживает атрибутescape
.<o:messages escape="false" />