2013-03-12 146 views
0

獲取selectOneMenu用於的選擇的項目,我想從代碼獲得primefaces selectOneMenu用於所選項目的名稱:從代碼

這是我selectOneMenu用於:

FacesContext.getCurrentInstance().getViewRoot().findComponent("formMain:somSelect"); 

組件被發現。 我已經嘗試將它轉換爲SelectOneMenu,但我不會得到像「getSelectedValue()」這樣的方法,它寫在「客戶端API」的用戶手冊中。 我也試過了:

FacesContext.getCurrentInstance().getViewRoot().findComponent("formMain:somSelect").getAttributes().get("label"); 

但是這會返回NPE。

<p:selectOneMenu id="somSelect" value="#{userManagerBean.somValue}" valueChangeListener="#{userManagerBean.somListener}" styleClass="selecters"> 
<f:selectItems value="#{userSelectBean.userList}" /> 
</p:selectOneMenu> 

UserManagerBean.java

@ManagedBean 
@RequestScoped 
public class UserManagerBean { 

    private String somValue; 
    private String selectedUser; 
    private List<User> userData;  
    private List<User> users; 

    public UserManagerBean() { 

    } 

    public String getSomValue(){ 
     return somValue;   
    } 

    public void setSomValue(String somValue){ 
     this.somValue = somValue; 
    } 

    // Getter for Table Content 
    public List<User> getUserData() { 
     return userData; 
    } 

任何想法?

€:問題是,所選擇的項目僅在getter返回,如果我調用一個方法和AJAX更新:

<p:ajax update="panelMain" listener="#{userManagerBean.changeEvent}" /> 

但我沒有得到頁面上的一個正確選擇的項目加載(item = null)。

+1

你爲什麼複雜這個?您可能將組件的值綁定到支持bean屬性? – partlov 2013-03-12 10:10:51

+0

我也試過,但我沒有得到選定的項目名稱作爲值,也是我的valueChangeListener不起作用:如果我改變選定的項目不會被調用。更確切地說:getter返回null爲somValue ** – ctekk 2013-03-12 10:20:41

+1

你可以顯示你的支持bean的相關部分嗎?類定義,註釋以及此屬性'somValue'的getter和setter。 – partlov 2013-03-12 10:25:47

回答

1

當您使用bean列表填充f:selectItems時,應該添加轉換器或提供itemValue屬性。在你的情況下,價值是String提供itemValue一些String標識您User豆:

<f:selectItems value="#{userSelectBean.userList}" var="u" itemValue="#{u.code}" itemLabel="#{u.name}"/> 

更改屬性codename給那些你在User豆有。作爲支持bean的值爲itemValue指向StringString

+0

謝謝。我想我知道問題是什麼。加載頁面時,getter返回值始終爲null,表示** somValue **。只有當我再次調用bean時(例​​如從一個按鈕),返回正確的值。任何想法在解決方法將非常感激! – ctekk 2013-03-12 11:47:00