如何将h: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>

这里的代码用"id"设置Metadata.thema,但是我需要设置"label"。我尝试了label="#{Metadata.thema}",但它不适合我。

然后使用标签作为值。使用接受单个参数的SelectItem构造函数:

new SelectItem("label");

这样,标签将同时用作项值和项标签。


更新你似乎错误地表达了问题和实际上想要得到两者。在这种情况下,只需自己持有ID-label值对的Map,并通过所选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]}" />

相关内容

  • 没有找到相关文章

最新更新