JSF。 SelectOneMenu和SelectItems

时间:2012-06-10 13:32:33

标签: jsf selectonemenu

我试图让用户从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

2 个答案:

答案 0 :(得分:3)

<f:selectItems>不支持Collection。您需要ListMapObject[]

另见:


更新:事实证明您使用的是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> 
相关问题