如何更好地使用JSF h:消息?

时间:2010-05-28 15:58:06

标签: jsf

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

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

所以我尝试根据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);

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

2个问题:

1)这里有什么问题?

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

谢谢,

3 个答案:

答案 0 :(得分:41)

h:messages会显示所有消息,也会显示已在页面h:message中显示的消息。但是,您可以使用null将其设置为显示包含globalOnly="true"客户端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.显示已显示的消息。 <h:message>

<h:messages redisplay="false" />

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

只是为了确定,

facesContext.addMessage("clientId",  facesMessage);

这会将给定的消息附加到<h:message for="clientId">而不是<h:messages id="clientId">,正如您所期望的那样。

答案 1 :(得分:4)

<h:messages>更改为<h:message>

<h:messages显示当前上下文的所有消息,<h:message>显示特定消息。

我相信你想将id改为for给它一个目标,但我可能错了。

答案 2 :(得分:1)

我们可以为不同的严重性级别提供不同类型的h:消息。例如,您可能希望在红色框中显示所有错误消息,并使用不同的样式(如黄色表示警告)和绿色表示信息。您还可以使用不同的面板进行环绕。您可以通过使用不同的h:消息并单独应用这些样式来实现。

<!--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>