0

使用しているh:selectOneMenuので、ID値ではなく、ラベルを取得したいと思います。バッキングBeanでSelectItem、をロードするために取得されるオブジェクトを作成しますh:selectOneMenu

new SelectItem("id", "label");

私のビューコード:

<h:selectOneMenu value="#{Metadata.thema}">
    <f:selectItems value="#{ThemaBean.themes}" /> 
    <f:valueChangeListener type="com.schober.events.SelectThemaEvent" />
</h:selectOneMenu>

ここでのコードはで設定されますMetadata.themaが、"id"を設定する必要があり"label"ます。試してみましlabel="#{Metadata.thema}"たが、うまくいきません。

4

1 に答える 1

2

次に、ラベルを値として使用します。SelectItem代わりに、単一の引数をとるコンストラクターを使用します。

new SelectItem("label");

このようにして、ラベルはアイテムの値とアイテムのラベルの両方として使用されます。


質問を誤解しているようで、実際には両方を取得したいという更新。その場合は、MapID とラベルの値のペアを自分で保持し、選択した ID でマップからラベルを取得します。

private Map<Long, String> themaIdsAndLabels = new HashMap<Long, String>();

// ...

public void submit() {
    String themaLabel = themaIdsAndLabels.get(thema);
    // ...
}

これを再利用して、またはそれ以上のMapリストを生成SelectItemできます。JSF 2.0 および EL 2.2 を使用している場合は、そのマップ<f:selectItems>を にコピーする必要なく、内部で直接使用することもできますList<SelectItem>

<f:selectItems value="#{bean.themaIdsAndLabels.entrySet()}" var="entry" itemValue="#{entry.key}" itemLabel="#{entry.value}" />

または、出力テキストにラベルを再表示することが唯一の目的である場合は、単に使用することもできます

<h:outputText value="#{bean.themaIdsAndLabels[bean.thema]}" />
于 2011-09-01T12:54:50.367 に答える