Да, вы можете вернуть список или массив POJO вместо SelectItems.Для этого вам понадобится конвертер, но это не имеет большого значения.Итак, сначала конвертер:
@FacesConverter(forClass=Hero.class)
public class HeroConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return new Hero(value);
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return ((Hero)value).getName();
}
}
Теперь, если вы возвращаете список от Hero
es до <f:selectItems>
, у вас есть опции в HTML, где label - Hero.toString()
, а значение возвращается из HeroConverter.getAsString()
.
Еще одна вещь.Если вы передаете какое-то значение для этого выбора, JSF преобразует его в объект и проверяет (методом equals ()), был ли этот объект в списке объектов для выбора.Так что в случае выше, вам нужно переопределить equals()
в Hero
, чтобы проверить, совпадают ли имена.Другое решение состоит не в создании нового экземпляра в getAsObject
, а в сохранении где-нибудь списка доступных Hero
es, возвращении этого списка в <f:selectionItems>
и возврате объекта из этого списка в getAsObject()
.