あなたが与えたコードはあまり意味がないようです。イディオムは次のようになります。
<h:selectOneMenu value="#{backingBean.typeCode}">
<f:selectItems value="#{backingBean.typeCodes}" var="typeCode" itemLabel="#{typeCode}" itemValue="#{typeCode}" />
</h:selectOneMenu>
ここで#{backingBean.typeCode}
は、デフォルトで選択された値を表す単一の値を最初に返すプロパティです。空の場合、最初は値が選択されていません。ユーザーがフォームを送信すると、ユーザーが選択した値を受け取ります。あなたのコードでは、これはタイプになりますLong
。
#{backingBean.typeCodes}
ユーザーが選択できるすべての値のコレクションを返すプロパティです。あなたのコードでは、これはList<Long>
.
値は単純な long であるため、ここではラベルと値は同じです。ユーザーなどのより複雑なオブジェクトの場合は#{user.name}
、itemLabel や itemValue などに使用できます#{user.id}
。itemValue に対してレンダリングされるものはすべて、selectOneMenu
コンポーネントの値バインディングにプッシュされます。
もう 1 つのヒント: 一般SelectItem
に、バッキング Bean で型を使用しないようにする必要があります。JSF 固有の型ではなく、単純なドメイン オブジェクトとそのコレクションを優先します。