如何将HTML代码添加到JSF FacesMessage

gek*_*ish 16 html jsf message escaping

默认情况下,每个JSF FacesMessage都显示在一行中.我想<br />在消息本身添加一个HTML换行符,以便整齐地显示消息.我尝试过如下

message = new FacesMessage("test<br/>test");
Run Code Online (Sandbox Code Playgroud)

但是,它被JSF转义并显示为文字文本.如何在FacesMessage没有转义的情况下将HTML代码添加到a ?

Bal*_*usC 28

理论上,您需要像has 一样的组件escape属性.你不是唯一一个想要这个的人,这是经常要求的,但是根据JSF人的说法,这是一个WONTFIX.h:messagesh:outputText

你有几个选择:

  1. 使用\n而不是相应地<br>应用CSS(最简单).

    #messages td { white-space: pre; }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个扩展的自定义渲染器MessageRenderer(更难,但如果你想覆盖更多的HTML而不仅仅是换行符,那就太好了).

  3. List在bean 中的一些消息中自己收集消息并使用<t:dataList>,或者当您已经使用Facelets而不是JSP时显示消息<ui:repeat>.这样您就可以<h:outputText escape="false">用来显示各个消息.

  4. 或者,当您已经使用JSF 2.0时,只需重复FacesContext#getMessageList()自己.每个项目都给你一个FacesMessage背部,反过来提供了几个吸气剂.然后,您可以在a中显示摘要<h:outputText escape"false" />.

    <ul>
        <ui:repeat value="#{facesContext.messageList}" var="facesMessage">
            <li>
                <h:outputText value="#{facesMessage.summary}" escape="false" />
            </li>
        </ui:repeat>
    </ul>
    
    Run Code Online (Sandbox Code Playgroud)
  5. 或者,当您使用JSF实用程序库OmniFaces时,请使用其支持属性的<o:messages>组件escape.

    <o:messages escape="false" />
    
    Run Code Online (Sandbox Code Playgroud)