選択項目の値を明示的に に設定するだけnull
です。
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItem itemValue="#{null}" itemLabel="--select--" />
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
いいえ、空文字列のようなものitemValue=""
では不十分です。それは本当にする必要がありますnull
。そうしないと、この Q&A: Using a "Please select" f:selectItem with null/empty value within ap:selectOneMenuで説明されているように問題が発生します。
アイテムがたまたまありrequired="true"
、JSF 2.x を使用している場合は、選択アイテムに追加できます。noSelectionOption="true"
これは、選択コンポーネントも設定する場合にのみ役立ちます。エンドユーザーが別のアイテムを選択すると、リスト内の空のオプションが非表示になり、空のオプションを再度選択することができなくなります。hideNoSelectionOption="true"
<h:selectOneMenu value="#{bean.selectedItem}" hideNoSelectionOption="true">
<f:selectItem itemValue="#{null}" itemLabel="--select--" noSelectionOption="true" />
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
The Definitive Guide to JSFのセクション「SelectItem tags」の114 ページも参照してください。
選択コンポーネントの属性に#{null}
関連付けられた Bean プロパティが の場合、値が の選択項目を使用してデフォルトの選択を表示できることに注意してください。のタグ ドキュメントを調べた場合は、この属性に気づき、「選択オプションなし」を表すことを意図したものだと考えたことがあるでしょう。実際、これは真実ではありません。多くのフォーラム、Q&A サイト、およびインターネット上の質の悪いチュートリアルでわかるように、多くの初心者は確かにそう考えています。誤解を招く属性名にもかかわらず、「選択オプションなし」を表すものではありません。value
null
<f:selectItem>
noSelectionOption
より良い属性名は だったでしょうがhideWhenOtherOptionIsSelected
、それでも、親選択コンポーネントが明示的にhideNoSelectionOption="true"
属性セットを持っている場合にのみ機能します。したがって、hideWhenOtherOptionIsSelectedAndHideNoSelectionOptionIsTrue
最終的には最も自明な属性名でした。noSelectionOption
残念ながら、 JSF 1.2 で が実装されたとき、これはあまりよく考えられていませんでした。この属性が機能するために 2 つの属性を要求する必要はありませんでした。この属性ペアの主な目的は、コンポーネントですでに非null
値が選択されている場合に、Web サイトのユーザーが「選択なしオプション」を再選択できないようにすることです。たとえば、メソッドで準備するか、非値@PostConstruct
でフォームを送信した後にコンポーネントを再レンダリングします。null
著作権の免責事項: 本は私によって書かれています。