h:selectOneListbox
属性を持つ がありますrequired="true"
。クライアント側の検証は正常にa4j:ajax
機能します。
有効な選択が行われると、別のパネルグループがレンダリングされます。
例:
<h:selectOneListbox
....
id="first"
....
required="true"
>
<a4j:ajax event="valueChange" render="secondGroup" listener="#{myController.anotherMethodINeed}"/>
</h:selectOneListbox>
<!-- the other panel -->
<h:panelGroup id="secondGroup" layout="none">
<h:panelGroup id="secondGroupCheck" layout="none" rendered="#{not empty model.first}">
</h:panelGroup>
</h:panelGroup>
これも機能します。
問題は次のとおりです。
ユーザーが最初の選択ボックスで不正な値 (空の値など) を選択した場合、入力はクライアント側で検証されます。したがって、情報がモデルに到達することはありません。最初の有効な入力の後、パネルは常にレンダリングされます。サーバーは変更を認識しないため、再度非表示にする方法はありません。
私が知っている唯一の回避策は、そのようなフィールド用のカスタム バリデータを作成することです。パネルをレンダリングする必要がある場合、バリデーターはフラグを設定します。このフラグを使用して、パネルグループをレンダリングするかどうかを決定できます。
これを行うよりスマートな方法はありませんか?
すべてのフィールドをチェックするようなものを使用できることは知っていrendered="#{not facesContext.validationFailed}"
ますが、1 つのフィールドだけをチェックする方法はわかりません。