默认情况下,每个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" />

10-08 08:40
查看更多