2011-09-01 145 views
0

我使用的是h:selectOneMenu,我想要的不是ID值,而是标签。在backing bean中,我创建了SelectItem对象,这些对象用于加载h:selectOneMenu如何将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}",但它不适合我。

回答

2

然后只需使用标签作为值。使用SelectItem构造函数取一个参数,而不是:

new SelectItem("label"); 

这样的标签将被用作两个项目的价值和项目的标签。


更新你似乎已经misphrased问题和实际上想两者。在这种情况下,只需持有ID标签值对的Map,并通过所选ID从地图获取标签。

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

// ... 

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

可以重新使用该Map产生的SelectItem s甚至更多的列表,如果你使用JSF 2.0和2.2 EL,你也可以使用地图直内<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]}" /> 
+0

好了,但有什么办法让两者,ID和标签?例如.. 标签=#{Metadata.label}“>? – adgfs

+0

你告诉过你不想得到这个ID吗?无论如何,我更新了答案。 – BalusC

+0

是的,米问题是不是很正确 – adgfs

相关问题