ユーザーがselectOneMenuで何も選択できないようにするための最良または最も簡単な方法は何だろうと思っていました。
私の例:登録済みユーザーのリストがあり、管理者はいくつかの基準で表示されたユーザーのリストをフィルターできるはずです。ユーザータイプ(従業員、顧客、...)などのこれらの基準は、次のようにselectOneMenusで選択できます。
<h:selectOneMenu value="#{myBean.selectedUsertype}" converter="#{usertypeConverter}">
<f:selectItems value={myBean.usertypes}" />
</h:selectOneMenu>
対応するselectOneMenuがコンバーターを使用してPOJOのリストによってサポートされている場合、ユーザーが特定のアイテムを選択しなかったことを示すアイテムをリストに追加するにはどうすればよいですか?現在、ラベル「---」を表示するダミーのユーザータイプオブジェクトがありますが、これはアプリケーションの他の領域でいくつかの問題を引き起こしており、これが最良のソリューションであるとは思いません。
選択項目の値を明示的にnull
に設定するだけです。
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItem itemValue="#{null}" itemLabel="--select--" />
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
いいえ、itemValue=""
のような空の文字列では不十分です。本当にnull
でなければなりません。そうしないと、このQ&Aで説明されているように問題が発生します。 p:selectOneMenu内でnull /空の値を持つ「選択」f:selectItemを使用 。
アイテムがrequired="true"
であり、JSF 2.xを使用している場合、noSelectionOption="true"
を選択アイテムに追加できます。これは、also選択コンポーネントでhideNoSelectionOption="true"
を設定した場合にのみ役立ちます。エンドユーザーが別の項目を選択すると、リスト内の空のオプションが非表示になり、空のオプションを再選択できなくなります。
<h:selectOneMenu value="#{bean.selectedItem}" hideNoSelectionOption="true">
<f:selectItem itemValue="#{null}" itemLabel="--select--" noSelectionOption="true" />
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
単一のselectItemをnull値で追加します。
<h:selectOneMenu value="#{bean.question}" required="true" requiredMessage="Please select a question">
<f:selectItem itemValue="#{null}" itemLabel="Select" />
<f:selectItems value="#{bean.questions}" />
</h:selectOneMenu>
プライムフェイスで(<p:selectOneMenu
..を使用するなど何らかの理由で<p:ajax
...を使用する必要がある場合)、次の空のアイテムを追加できます。
<f:selectItem itemValue="#{null}" itemLabel="--select--" itemDisabled="#{Mybean.value ne null}" />
注:このような場合、次の2つのタグは必要ありません。
hideNoSelectionOption="true"
そして
noSelectionOption="true"