默认情况下,每个jsfFacesMessage
都显示在一行中。我想在消息本身添加一个HTML换行符<br />
,以便消息显示得整洁。我像下面那样试过
message = new FacesMessage("test<br/>test");
但是,它被JSF转义,并以文本形式显示。如何将HTML代码添加到
FacesMessage
而不被转义? 最佳答案
理论上,您需要像escape
那样的组件的h:messages
属性。你不是唯一一个想要这个的人,这是以前经常要求的,但根据JSF的人,这是一个Wontfix。
您有几个选项:
使用h:outputText
而不是\n
并相应地应用css(最简单)。
#messages td { white-space: pre; }
创建一个扩展了
<br>
的custom renderer(稍微难一点,但如果您想覆盖的HTML多于linebreaks,那就太好了)。将消息自己收集到bean中的一些
MessageRenderer
中,并使用List
显示它们,或者当您已经使用facelets而不是jsp时,使用<t:dataList>
。这样就可以使用<ui:repeat>
来显示单个消息。或者,当您已经在JSF 2.0上时,只需迭代一下您自己。每一个项目都会给你一个
<h:outputText escape="false">
背面,这反过来又提供了几个吸气剂。然后可以在FacesContext#getMessageList()
中显示摘要。<ul>
<ui:repeat value="#{facesContext.messageList}" var="facesMessage">
<li>
<h:outputText value="#{facesMessage.summary}" escape="false" />
</li>
</ui:repeat>
</ul>
或者,当您使用jsf实用程序库时,使用它的
FacesMessage
来代替它,后者支持<h:outputText escape"false" />
属性。<o:messages escape="false" />