1

私は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コンポーネントが無効になっており、フォームを送信すると「必要な値」の検証が機能しないという考えです。selectBooleancheckbox コンポーネントをクリックすると、inputText が有効になり、フォームを送信すると「必要な値」の検証も機能します。ただし、inputText を無効にすると、検証は引き続き機能し、「値が必要です」というメッセージが表示され、フォームを送信できません。チェックボックスをクリックすると、サーバー側の JSF UI コンポーネントツリーが適切に更新されないようですが、チェックボックスをクリックするたびに inputText コンポーネントが無効になることが視覚的にわかります。

これを解決する方法はありますか?

4

2 に答える 2

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>
于 2016-08-01T12:23:10.407 に答える