5

我有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>

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

到目前为止我什么都找不到...

4

2 回答 2

4

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

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

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

<p:password binding="#{new_password}" ... />
<h:commandLink ... rendered="#{not new_password.valid}" />

请注意,手动将面孔消息添加到上下文不会将输入组件标记为无效。Validator因此,应该使用抛出 a的 true ValidatorException,或者input.setValid(false)必须以编程方式进行显式调用。

于 2013-09-16T20:31:04.967 回答
2

我认为有了这个问题的答案,您的要求可以存档:

如何为 JSF 错误消息编号并将编号附加到无效组件

我认为你可以这样做:

<h:outputText value="output text" rendered="#{bean.messageIndexes['form:input1'] > 0}" />
于 2013-09-16T19:40:58.473 回答