【问题标题】:Several messages programmatically in JSFJSF 中以编程方式编写的几条消息
【发布时间】:2013-12-28 22:39:14
【问题描述】:

我有两个地方可以在我的网站中放置消息。与备用 div 相关的消息和与主容器相关的消息。

我在同一页面中同时使用这两个 h:messages(它的表单具有 prependId=false 并且没有 id,因此消息 id 不会与其他人一起附加):

<h:messages id="container-messages" infoClass="info-message" warnClass="warn-message" errorClass="error-message" globalOnly="false" />

<h:messages id="aside-messages" infoClass="info-message" warnClass="warn-message" errorClass="error-message" globalOnly="false" />

然后在我的 Java 代码中,我使用它来打印一些消息:

facesContext.addMessage("container-messages", new FacesMessage(FacesMessage.SEVERITY_INFO, "one message", null));

第一个问题是这可行,但它会在两者中打印消息,而不仅仅是在容器消息中。

后来我换成了:

<h:message id="container-messages" infoClass="info-message" warnClass="warn-message" errorClass="error-message"/>

<h:message id="aside-messages" infoClass="info-message" warnClass="warn-message" errorClass="error-message" />

也试过了:

<h:message for="container-messages" infoClass="info-message" warnClass="warn-message" errorClass="error-message"/>

<h:message for="aside-messages" infoClass="info-message" warnClass="warn-message" errorClass="error-message" />

但在这两种情况下它都没有显示任何内容。

有什么想法吗?

【问题讨论】:

    标签: java jsf messages


    【解决方案1】:

    h:messages 用于与特定组件无关的所谓全局 消息,因此此处不允许使用for 属性。

    h:message 用于与特定组件相关的消息,因此for 属性是必需的,这意味着您需要要绑定到的组件。

    为了达到您的目标,您可以通过以下方式使用绑定到某个组件的两个 h:message 元素(例如一个空的 h:grapicImage):

        <h:graphicImage id="someID" />
        <h:message for="someID" id="container-messages" infoClass="info-message" 
             warnClass="warn-message" errorClass="error-message"/>
        <div>
             stuff
        </div>
        <h:message for="someID" id="aside-messages" infoClass="info-message" 
             warnClass="warn-message" errorClass="error-message" />
    

    按照您已经描述的方式添加消息:

        facesContext.addMessage("container-messages", new 
             FacesMessage(FacesMessage.SEVERITY_INFO, "message1", null));
        facesContext.addMessage("aside-messages", new 
             FacesMessage(FacesMessage.SEVERITY_INFO, "message2", null));
    

    另请参阅:

    【讨论】:

    • 谢谢,但如果我不能将它们绑定到特定的 clientId 消息,我仍然不明白 的目的是什么。
    • 如果您设置了globalOnly="false",这意味着如果没有为该组件定义h:message,它将显示您为特定组件添加的消息(例如“container-messages”)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    相关资源
    最近更新 更多