从代码中获取SelectOneMenu的所选项目

时间:2013-03-12 10:05:25

标签: java jsf 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;
    }

有什么想法吗?

€:问题是如果我调用方法和ajax更新,则只在getter中返回所选项:

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

但我在页面加载时没有得到正确的选定项目(item = null)。

1 个答案:

答案 0 :(得分:1)

当您使用bean列表填充f:selectItems时,您应该添加转换器或提供itemValue属性。在您的情况下,值StringitemValue提供String bean的User标识符:

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

将属性codename更改为User bean中的属性。由于您在辅助bean中的值为itemValue,因此String指向String