UI: повтор не работает с F: SelectItem - PullRequest
5 голосов
/ 16 ноября 2011

Я использую Icefaces выберите в меню, чтобы выбрать пользователя из списка пользователей и я хочу повторить 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 не содержит идентификатор свойства, имя которого они существуют в сущности пользователя. пожалуйста, посоветуйте, спасибо.

Ответы [ 2 ]

24 голосов
/ 16 ноября 2011

<ui:repeat> является компонентом пользовательского интерфейса, тогда как <f:selectItem> является обработчиком тегов (как JSTL).Taghandlers запускается во время сборки представления перед компонентами пользовательского интерфейса, которые запускаются во время визуализации представления.Таким образом, в настоящий момент <ui:repeat> не существует средств для <f:selectItem>.

A <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 не должен конфликтовать с существующим компонентом в области действия.

См. Также:

3 голосов
/ 16 ноября 2011

почему бы не использовать f: selectItems.Я думаю, что-то вроде этого будет работать.

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

EDIT также попробуйте удалить скобки из user.getUsersList () в вашем коде, я думаю, это не так, как вы вызываете функцию вjsf2

...