2011-09-01 163 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

相關問題