私は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 コンポーネントが無効になることが視覚的にわかります。
これを解決する方法はありますか?