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

gek*_*ish 15 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>
Run Code Online (Sandbox Code Playgroud)

并在java层

FacesMessage facesMessage = new FacesMessage(Constants.saveMessageConfirm);
    FacesContext.getCurrentInstance().addMessage(Constants.STATIC_CONFIRM_MSG_CLIENT_ID,  facesMessage);
Run Code Online (Sandbox Code Playgroud)

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

2个问题:

1)这里有什么问题?

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

谢谢,

Bal*_*usC 41

h:messages显示所有的消息,这也已经显示在的那些h:message页面.但是,您可以将其设置为null使用客户端ID 显示消息globalOnly="true".

<h:messages globalOnly="true" />
Run Code Online (Sandbox Code Playgroud)

您还可以根据以下内容为消息提供不同的样式FacesMessage.Severity:

<h:messages infoClass="info" errorClass="error" />
Run Code Online (Sandbox Code Playgroud)

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

.info {
     display: none;
}
.error {
     color: red;
}
Run Code Online (Sandbox Code Playgroud)

您可以使用redisplay="false"它告诉它不通过ee显示已显示的消息<h:message>.

<h:messages redisplay="false" />
Run Code Online (Sandbox Code Playgroud)

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

只是要确定,

facesContext.addMessage("clientId",  facesMessage);
Run Code Online (Sandbox Code Playgroud)

这将把给定的消息附加<h:message for="clientId">到一个<h:messages id="clientId">不像你想象的那样.


Ale*_*ere 5

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

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

我相信你想改变idfor给它一个目标,但我可能是错的。