Вы можете использовать FacesContext#messageList(String clientId)
, чтобы получить List<FacesMessage>
со всеми сообщениями для определенного идентификатора клиента (из которого вас обычно интересует только первое, вы можете изменить приведенный ниже примересли ты хочешь).Таким образом, вы можете просто проверить атрибут rendered
, если список не пустой.Затем вы можете использовать <h:outputText escape="false">
для отображения сообщения без неявного экранирования HTML.При необходимости вы можете обернуть все это в составной файл, чтобы сохранить ваш код СУХИМЫМ.
<h:inputText id="input1" binding="#{input1}" value="#{bean.input1}" />
<ui:param name="input1Messages" value="#{facesContext.messageList(input1.clientId)}" />
<h:panelGroup rendered="#{not empty input1Messages}">
<h3>Some header</h3>
<p><h:outputText value="#{input1Messages[0].summary}" escape="false" /></p>
<p>Some footer</p>
</h:panelGroup>
Обратите внимание, что этот метод не был доступен в JSF 1.x, поэтому вам нужно создать собственный компонентэто.