我可以将html添加到带有自定义组件的jsf h:message中吗?

时间:2012-02-05 11:42:47

标签: jsf-2

我想在JSF 2.0中的h:消息中添加页眉和页脚图像,因此它有很好的边框。 看起来这样做的方法是为组件实现自定义渲染器并写出标记。我喜欢这样做作为一个复合组件,但我不知道如何说'除非你画消息'不要绘制页眉和页脚'。

有没有办法用复合组件做到这一点?

我正在使用mojarra。

1 个答案:

答案 0 :(得分:1)

您可以使用FacesContext#messageList(String clientId)获取List<FacesMessage>包含特定客户ID的所有消息(您通常只对第一个客户ID感兴趣,如果您可以更改以下示例)想)。因此,如果列表不为空,您可以检查rendered attribtue。然后,您可以使用<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中不可用,这就是您需要为其创建自定义组件的原因。