仅在显示特定h:消息时显示JSF元素

Dan*_*iel 5 jsf-2

我有一个h:form带有几个输入,每个都有自己的h:message,我正在寻找一种方法来显示(使用render或指定一些styleClass)只有在显示特定的时候一些其他元素h:message(并在h:message没有显示时隐藏).

这是一段代码片段

<li>
    <h:panelGroup id="current_password_wrapper">
        <p:password value="#{myBean.myCurrPass}" id="current_password" required="true"
            styleClass="required_field" />
    </h:panelGroup>
    <h:message for="current_password"/>
</li>
<li>
    <h:panelGroup id="new_password_wrapper">
        <p:password value="#{myBean.myNewPass}" id="new_password" required="true"/>
    </h:panelGroup>
    <h:message for="new_password"/>
    <h:commandLink value="my value"/>
</li>
Run Code Online (Sandbox Code Playgroud)

我想h:commandLink只在显示时才<h:message for="new_password"/>显示

到目前为止我找不到任何东西......

Bal*_*usC 4

如果您的环境支持 EL 2.2,那么您可以检查是否FacesContext#getMessageList()empty支持特定的客户端 ID。

<p:password binding="#{new_password}" ... />
<h:commandLink ... rendered="#{not empty facesContext.getMessageList(new_password.clientId)}" />
Run Code Online (Sandbox Code Playgroud)

如果由于验证错误而显示消息,那么您也可以只检查UIInput#isValid()与消息关联的组件的状态。

<p:password binding="#{new_password}" ... />
<h:commandLink ... rendered="#{not new_password.valid}" />
Run Code Online (Sandbox Code Playgroud)

请注意,手动将面孔消息添加到上下文不会将输入组件标记为无效。因此,要么应该使用 trueValidator来抛出ValidatorException,要么input.setValid(false)必须以编程方式完成显式调用。