私は次のJSF2コードを持っています:
<p:selectOneMenu id="dropdown" value="#{data.selection}" required="true" converter="selectOneMenuConverter">
<f:selectItem itemLabel="Select one..." itemValue="" noSelectionOption="true" />
<f:selectItems value="#{data.entries}" var="entry" itemLabel="#{entry.name}" itemValue="#{entry}" />
<p:ajax update="display" event="change" />
</p:selectOneMenu>
<h:panelGroup id="display">
<h:outputText value="#{data.selection}" />
</h:panelGroup>
ドロップダウンから値を選択すると、すべてが期待どおりに機能します。ユーザーが「SelectOne」を選択してエントリを「選択解除」すると、selectonemenuが必要なため、これは不可能であるとJSFは文句を言います。
問題は、p:ajaxが検証をトリガーする部分的な送信を行うことです。(selectonemenuのように)入力フィールドで即時が発生した場合に検証が実行されるため、Immediate=trueも機能しません。検証は、ユーザーがページの下部にある[続行]ボタンを押したときにのみ発生します(コードには表示されていません)。
さらに、指定されたコンバーターは文字列をオブジェクトに変換し、デフォルト値の場合はnullを返します(これは「選択なし」のドメイン内で期待される値でもあります)。
だから私の質問は、私のケースを遂行するために私がしなければならないことです。私にとってこれは標準的なケースであり、これに対する解決策がないとは想像できません。
何か案は?
よろしく、フロリアン