ui:repeat不适用于f:selectItem

时间:2011-11-16 13:20:13

标签: jsf-2 facelets icefaces icefaces-1.8

我在菜单上使用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,名称。 请指教,谢谢。

2 个答案:

答案 0 :(得分:24)

<ui:repeat>是一个UI组件,而<f:selectItem>是一个标签处理程序(如JSTL)。 Taghandlers在视图构建时运行之前在视图渲染时运行的UI组件之前运行。所以在<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冲突。

另见:

答案 1 :(得分:3)

为什么不使用f:selectItems。我觉得这样的事情会起作用。

<f:selectItems value="#{user.getUsersList()}" var="user" itemLabel="#{user.name}"
                                            itemValue="#{user.id}" />

修改  还尝试从代码中的user.getUsersList()中删除括号,我认为它不是你如何在jsf2中调用函数