我试图让用户从JSF的下拉列表中选择一个集合的项目。 这是我正在使用的代码:
<f:view>
<h:form id="insert">
<h:selectOneMenu value="#{MyBean.user}">
<f:selectItems value="#{MyBean.userList}" var="currentUser" itemValue="#{currentUser.username}" itemLabel="#{currentUser.username}"/>
</h:selectOneMenu>
<h:commandButton value="Insert" action="#{AuctionBean.insertItem}"/><br>
</h:form>
</f:view>
这是MyBean的代码:
@ManagedBean
public class MyBean{
private String user;
private Collection<User> userList;
@PostConstruct
public void init() {
this.userList = UserRepository.getInstance().findAllUsers();
}
...
public String insertItem() {
System.out.println("The selected user is " + this.user);
...
return ("successfulInsertion");
}
...
}
如果需要我的用户的getter和setter:
public String getUser() {
return this.user;
}
public void setUser(String user) {
this.user = user;
}
我的问题是,当它打印“所选用户是”时,没有写入user.toString(),而是userList.toString()!这就像selectOneMenu没有正确设置,但我搜索了很多。 有人可以帮忙吗?谢谢, AN
答案 0 :(得分:3)
<f:selectItems>
不支持Collection
。您需要List
或Map
或Object[]
。
更新:事实证明您使用的是JSP而不是Facelets。新的JSF 2.x标记和属性不可用于JSP。这包括<f:selectItems var>
。只有旧的JSF 1.x标记和属性可用于JSP。从JSF 2.0开始,JSP已经被Facelets弃用并取而代之。你应该使用Facelets。
答案 1 :(得分:1)
将<f:ajax/>
添加到您的<h:selectOneMenu value="#{MyBean.user}">
<h:selectOneMenu value="#{MyBean.user}">
<f:ajax/>
<f:selectItems value="#{MyBean.userList}" var="currentUser" itemValue="#{currentUser.username}" itemLabel="#{currentUser.username}"/>
</h:selectOneMenu>
每次您从下拉列表中选择一个值时,这会将您的选择提交给服务器...
OR
将<f:ajax execute="@form"/>
添加到您的按钮,以便在致电insertItem
<h:commandButton value="Insert" action="#{AuctionBean.insertItem}">
<f:ajax execute="@form"/>
</h:commandButton>