JSF.SelectOneMenu和SelectItems

and*_*axi 5 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>
Run Code Online (Sandbox Code Playgroud)

这是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");
    }
...
}
Run Code Online (Sandbox Code Playgroud)

如果需要我的用户的getter和setter:

public String getUser() {
        return this.user;
    }

    public void setUser(String user) {
        this.user = user;
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,当它打印"所选用户是"时,没有编写user.toString(),而是userList.toString()!这就像selectOneMenu没有正确设置,但我搜索了很多.有人可以帮忙吗?谢谢,AN

Bal*_*usC 4

<f:selectItems>支持Collection. 你需要一个ListMapObject[]

也可以看看:


更新:事实证明您正在使用 JSP 而不是 Facelets。新的 JSF 2.x 标记和属性不可用于 JSP。这包括<f:selectItems var>. 只有旧的 JSF 1.x 标记和属性可用于 JSP。从 JSF 2.0 开始,JSP 已被弃用并由 Facelets 取代。您应该改用 Facelets。

也可以看看: