默认情况下,每个 JSFFacesMessage
以单行形式呈现。我想添加 HTML 换行符<br />
消息本身,以便消息显示整齐。我尝试过如下
message = new FacesMessage("test<br/>test");
然而,它被 JSF 转义并显示为文字文本。如何将 HTML 代码添加到FacesMessage
没有逃脱?
理论上,你想要一个escape
属性为h:messages
像这样的组件h:outputText
有。您不是唯一一个想要这个的人,以前经常有人要求这样做,但根据 JSF 人员的说法,这是一个 WONTFIX。
您有多种选择:
-
Use \n
代替<br>
并相应地应用CSS(最简单)。
#messages td { white-space: pre; }
创建一个自定义渲染器 http://balusc.blogspot.com/2010/07/using-html-in-jsf-messages.html这延伸了MessageRenderer
(有点难,但是如果你想覆盖更多的 HTML 而不仅仅是换行符,那就太好了)。
自己在某些地方收集消息List
在 bean 中并使用显示它们<t:dataList> http://myfaces.apache.org/tomahawk-project/tomahawk12/tagdoc/t_dataList.html,或者当您已经使用 Facelets 而不是 JSP 时,使用<ui:repeat>
。这样你就可以使用<h:outputText escape="false">
显示各个消息。
-
或者,当您已经使用 JSF 2.0 时,只需迭代FacesContext#getMessageList() http://docs.oracle.com/javaee/6/api/javax/faces/context/FacesContext.html#getMessageList%28%29你自己。每个项目都会给你一个FacesMessage http://docs.oracle.com/javaee/6/api/javax/faces/application/FacesMessage.htmlback 又提供了几个吸气剂。然后您可以将摘要显示在<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 http://omnifaces.org,使用其<o:messages>成分 http://showcase.omnifaces.org/components/messages相反,它支持escape
属性。
<o:messages escape="false" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)