ページに h:selectOneMenu コンポーネントがあります。ユーザーはそこで「はい」または「いいえ」を選択する必要があります。初期値は null (「不明」というラベルが付いています) です。Bean ではブール値なので、null が可能です。ユーザーが有効な値 (「はい」など) を選択すると、[次へ] がヒットtrue
し、Bean に保存されます。
ユーザーはこのページに戻り、有効な値ではない「不明」を選択できます。ユーザーが [次へ] をクリックすると、エラー メッセージが表示されます。それは問題ありませんが、値は「Yes」に変更されます。Bean から更新されます。このようにして、ユーザーが入力した内容が変更されますが、これは必須の動作ではありません。ユーザーの価値を維持することは可能ですか?
<h:form id="co">
<h:selectOneMenu id="isCeded"
value="#{bean.boolValue}"
required="true"
requiredMessage="#{msgs.please_select_value}">
<f:selectItem itemLabel="#{msgs.unknown}"/>
<f:selectItem itemValue="true" itemLabel="#{msgs.yes}"/>
<f:selectItem itemValue="false" itemLabel="#{msgs.no}"/>
<f:ajax execute="@this" render="isCededMsg"/>
</h:selectOneMenu>*
<h:message id="isCededMsg" for="isCeded" errorClass="invalid"/>
<h:commandButton id="submit" value="Next" action="#{bean.submit}" />
</h:form>
奇妙なことに、この動作は、null が有効な値ではないフィールドにユーザーが null を入力した場合にのみ発生します。たとえば、ユーザーが検証済みのテキスト フィールドに別の無効な値を入力した場合 (例: 10 桁しか許可されていない 20 桁)、ユーザーが入力した無効な値は [次へ] をクリックした後も残ります。エラーメッセージのみが表示されます。