我试图从代码中选择一个名为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)。
答案 0 :(得分:1)
当您使用bean列表填充f:selectItems
时,您应该添加转换器或提供itemValue
属性。在您的情况下,值String
为itemValue
提供String
bean的User
标识符:
<f:selectItems value="#{userSelectBean.userList}" var="u" itemValue="#{u.code}" itemLabel="#{u.name}"/>
将属性code
和name
更改为User
bean中的属性。由于您在辅助bean中的值为itemValue
,因此String
指向String
。