我正在使用菜单上的icefaces select从用户列表中选择一个用户
我想为每个用户重复执行selectItem
这是我尝试过的:

<ice:selectOneMenu id="users">
    <ui:repeat value="#{user.getUserList()}" var="user">
        <f:selectItem itemLabel="#{user.name}" itemValue="#{user.id}"/>
    </ui:repeat>
</ice:selectOneMenu>

UserBean:
@Component("user")
@Scope("view")
Public class UserBean{

Public List<User> getUserList() throws Exception {
        return userService.getAllUsers();
    }

}

注意: UserBean不包含属性id和它们在用户实体中存在的名称。
请指教,谢谢。

最佳答案

<ui:repeat> 是一个UI组件,而 <f:selectItem> 是一个标记处理程序(如JSTL)。标记处理程序在 View 构建期间运行,而UI组件则在 View 呈现期间运行。因此,在<ui:repeat>运行时,还没有<f:selectItem>的方法。
也是标签处理程序的<c:forEach>可以工作,但更好的方法是使用 <f:selectItems> 。从JSF 2.0开始,它可以获取一个集合并支持var属性:

<ice:selectOneMenu id="users">
    <f:selectItems value="#{user.usersList}" var="userItem"
        itemLabel="#{userItem.name}" itemValue="#{userItem.id}" />
</ice:selectOneMenu>
请注意,var属性不应与作用域中的现有bean发生冲突。
也可以看看:
  • selectOneMenu wiki page
  • 关于jsf-2 - ui :repeat doesn't work with f:selectItem,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8152322/

    10-09 09:49