5

我试图让用户从 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");
    }
...
}

如果需要我的用户获取器和设置器:

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

    public void setUser(String user) {
        this.user = user;
    }

我的问题是,当它打印“选定的用户是”时,没有写 user.toString(),而是 userList.toString()!就像 selectOneMenu 没有正确设置一样,但我已经搜索了很多关于它的内容。任何人都可以帮忙吗?谢谢, 安

4

2 回答 2

3

<f:selectItems>Collection支持。你需要一个ListorMapObject[]

也可以看看:


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

也可以看看:

于 2012-06-10T14:02:14.890 回答
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>

每次您从下拉列表中选择一个值时,这都会将您的选择提交给服务器...

或者

添加<f:ajax execute="@form"/>到您的按钮,以便在调用之前提交下拉菜单的选择insertItem

<h:commandButton value="Insert" action="#{AuctionBean.insertItem}">
    <f:ajax execute="@form"/>
</h:commandButton> 
于 2012-06-10T13:43:06.467 回答