我的目标是使用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 - 最好的方法是什么?
谢谢,
答案 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>