如何设置h:selectOneMenu标签为值?

时间:2011-09-01 12:52:30

标签: java jsf selectonemenu

我正在使用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}",但它对我不起作用。

1 个答案:

答案 0 :(得分:2)

然后只使用标签作为值。使用SelectItem构造函数改为使用单个参数:

new SelectItem("label");

这样,标签将同时用作商品价值和商品标签。


更新您好像错过了这个问题而实际上希望同时获得这两个问题。在这种情况下,只需自己保存Map个ID标签值对,然后通过所选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]}" />