primefaces禁用组件验证

时间:2012-12-11 11:14:43

标签: validation jsf-2 primefaces disabled-input

我正在使用jsf 2.1 + primefaces 3.4.1。我遇到了阻止验证已禁用组件的问题。

我所拥有的是这样的:

<h:form id="form">
    <p:dataTable id="parentDataTable" value=#{bean.list} var="parentItem"..>
        <p:column>
          ..
          <p:dataTable id="childDataTable" value=#{bean.map[parentItem]}" var="childItem">
                <p:column>
                    <f:facet name="header">
                        some inputText
                    </f:facet>
                    <p:inputText id="inputText"
                        disabled=#{bean.selectedObjectsMap[childItem]} required="true" requiredMessage="value required" />
                    <p:message for=":form:parentDataTable:childDataTable:inputText" />
                </p:column>
                <p:column>
                    <f:facet name="header">
                        Select
                    </f:facet>
                    <p:selectBooleanCheckbox id="checkBox" value="#{bean.selectedObjectsMap[childItem]}">
                        <p:ajax update=":form:parentDataTable:childDataTable:inputText" />
                    </p:selectBooleanCheckbox>
                </p:column>
            </p:dataTable>
        </p:column>
    </p:dataTable>
</h:form>

我的想法是默认情况下,inputText组件被禁用,当我提交表单时,“required value”验证不起作用。当我单击selectBooleancheckbox组件时,inputText将被启用,并且当我提交表单时,“required value”验证也会起作用。但是,当我禁用inputText时,验证继续工作,并显示“需要的值”消息,我无法提交表单。当我点击复选框时,似乎服务器端的JSF UI组件树没有正确更新,虽然在视觉上我可以看到每次单击复选框时都会禁用inputText组件。

我有什么想法可以解决这个问题?

2 个答案:

答案 0 :(得分:3)

如果验证不比此示例代码中显示的更复杂,则使用

编码打开和关闭它
<p:inputText id="inputText" disabled="#{bean.selectedObjectsMap[childItem]}" required="#{!bean.selectedObjectsMap[childItem]}" requiredMessage="value required" />

这意味着您切换必需的属性与使用与禁用属性相同的bean值,只需添加!

答案 1 :(得分:0)

如果你想通过在commandButton上传递验证器,那么你可以实现

<f:validator validatorId="EmailValidator"  disabled="#{param['disableValidation']}" />

在表单上动态启用和禁用电子邮件验证程序。

<p:commandButton
                                    icon="ui-icon-remove" id="removeBtn"
                                    title="#{commonLbl.cmdRemoveCon}"
                                    disabled="#{pc_searchProspectBean.searchProspectVO.prospectVO.removeContactFlg}"
                                    styleClass="btn btn-sm btn-primary"
                                    action="#{pc_searchProspectBean.doRemoveContact(prospectTbl.indexId)}"
                                    update=":frm1:pnlProspectContact" onclick="modalDialog.show()"
                                    oncomplete="modalDialog.hide()">
                                    <f:param name="disableValidation" value="true" />
                                </p:commandButton>