【问题标题】:How to use JSF h:messages better?如何更好地使用 JSF h:messages?
【发布时间】:2010-05-28 15:58:05
【问题描述】:

我的目标是使用h:messages 传达用户错误和确认消息。显示这两种不同消息的 CSS 样式不同,实际上我想在确认消息旁边使用图像。

例如:

<tr>
    <td>
        <img/>
    </td>
    <td>
        <h:msg>
    </td>
</tr>

所以我尝试根据 2 个不同的客户端 ID 向 Faces Context 添加消息

<tr>
    <td height="5">
        <h:messages style="color:darkred" id="error_message" />
    </td>
</tr>

<tr>
    <td width="89%" class="InfoMsg" align="center">
        <h:messages id="confirm_message" />
    </td>
</tr>

还有java层:

FacesMessage facesMessage = new FacesMessage(Constants.saveMessageConfirm);

FacesContext.getCurrentInstance().addMessage(Constants.STATIC_CONFIRM_MSG_CLIENT_ID, facesMessage); 

但是,即使我将消息添加到 clientId confirm_message - 并且仅添加到 confirm_message - 而不是 error_message - 消息以 2 种不同的样式显示两次(请参阅上面的 HTML)。

2 个问题:

  1. 这里有什么问题?

  2. 如果我想在第二个tr 中显示td 中的图像,并在出现确认消息时有条件地显示第二个tr - 最好的方法是什么?

    李>

谢谢

【问题讨论】:

    标签: jsf


    【解决方案1】:

    h:messages 显示所有 消息,以及页面中已显示在h:message 中的消息。但是,您可以使用globalOnly="true" 将其设置为显示具有null 客户端ID 的消息。

    <h:messages globalOnly="true" />
    

    您还可以根据FacesMessage.Severity 为消息赋予不同的样式:

    <h:messages infoClass="info" errorClass="error" />
    

    例如,这个 CSS 隐藏了 INFO 消息并使 ERROR 消息变为红色:

    .info {
         display: none;
    }
    .error {
         color: red;
    }
    

    您可以使用redisplay="false" 告诉它不通过 e.e. 显示已显示的消息。 &lt;h:message&gt;.

    <h:messages redisplay="false" />
    

    您只需要确保它被放置在组件树中所有其他消息组件之后。如有必要,您可以使用 CSS 将其重新定位在顶部的某个位置。

    为了确定,

    facesContext.addMessage("clientId",  facesMessage);
    

    这会将给定消息附加到&lt;h:message for="clientId"&gt;,而不是您似乎期望的&lt;h:messages id="clientId"&gt;

    【讨论】:

    • 我在这篇文章中发布了一个关于你的第一个陈述的问题。你能看看吗? Here it is.
    • @this:对不起,我的陈述毕竟确实是错误的。没有人是完美的 :) 请更新您的问题。我已经更新了这个和其他答案。谢谢你的叫醒。
    • BlausC,你太棒了。你怎么知道它只能有一个子元素?
    • @BalusC 在 facelet 和 backing bean 中使用组件的 id 作为简单字符串(就像在上一个示例中所做的那样)是一种好习惯吗?也许有更好的方法来同步这个值?例如。声明一个常量,在视图中绑定它的值并在支持 bean 的代码中使用相同的常量?
    • 如果您只是想以特定样式显示消息,您可以使用 style 标签内联而不使用 css。示例:&lt;h:messages style="color: red"/&gt;
    【解决方案2】:

    &lt;h:messages&gt; 更改为&lt;h:message&gt;

    &lt;h:messages 显示当前上下文的所有消息,&lt;h:message&gt; 显示特定消息。

    而且我相信您想将 id 更改为 for 来给它一个目标,但我可能错了。

    【讨论】:

      【解决方案3】:

      对于不同的严重性级别,我们可以有不同类型的 h:messages。例如,您可能希望在红色框中显示所有错误消息,并使用不同的样式,例如黄色表示警告和绿色表示信息。你也可以用不同的面板环绕。您可以通过使用不同的 h:messages 并单独应用样式来做到这一点。

      <!--Displays only Error Messages-->
      <h:messages styleClass="mystyle" layout="list" id="msg1" infoStyle="display:none"       warnStyle="display:none"></h:messages>
      
      <!--Displays only Warning Messages-->
      <h:messages styleClass="messages" layout="list" id="msg2" errorStyle="display:none"     infoStyle="display:none"></h:messages>
      
      <!--Displays only Info Messages-->
      <h:messages styleClass="messages" layout="list" id="msg2" errorStyle="display:none"     warnStyle="display:none"></h:messages>
      

      【讨论】:

        猜你喜欢
        • 2011-05-05
        • 2012-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-07
        相关资源
        最近更新 更多