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