0

我正在尝试从代码中获取 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>

用户管理器Bean.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 )。

4

1 回答 1

1

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

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

更改属性code以及name您在Userbean 中拥有的属性。是itemValueString作为你在backing bean中的价值的支持String

于 2013-03-12T10:35:05.947 回答