2016-10-06 7 views
2

Я работаю с JSF 2.2, и я хотел бы следующие alert сообщений (изображение) не показываю, когда пользователь выбрал "Seleccione..." сообщений:Как добавить f: selectItem с сообщением «select ...» to h: selectOneMenu объектов (JSF)?

enter image description here

[serverERROR: класс javax.faces.component.UpdateModelException Не могу конвертировать Seleccione ... класса java.lang.String типа для класса modelo.entidades.Equipo]

Мои Бин:

@ManagedBean 
@SessionScoped 
public class Bean{ 

    private String message; 
    private Equipo equipoSelected; 
    private List<Equipo> equipos; 

    public Bean() { 
    } 

    @PostConstruct 
    public void init(){ 
     message = "Seleccione..."; 
     equipos = new ArrayList<Equipo>(); 
     equipos.add(new Equipo(/*....*/)); 
     equipos.add(new Equipo(/*....*/)); 
     equipos.add(new Equipo(/*....*/)); 
     equipoSelected = new Equipo(); 
    } 

    public void updateSelected(){ 
     //... 
    } 

    public setMessage(String message){ 
     this.message = message; 
    } 

    public String getMessage(){ 
     return message; 
    } 

    public void setEquipos(List<Equipo> equipos){ 
     this.equipos = equipos; 
    } 

    public List<Equipo> getEquipos(){ 
     return equipos; 
    } 
    public void setEquipoSelected(Equipo equipoSelected){ 
     this.equipoSelected = equipoSelected; 
    } 

    public Equipo getEquipoSelected(){ 
     return equipoSelected; 
    } 



} 

и код xhtml:

<h:form> 
    <h:selectOneMenu value="#{bean.equipoSelected}"> 
     <f:selectItem itemValue = "#{null}" itemLabel="#{bean.message}"/> 
     <f:selectItems value="#{bean.equipos}" var="equipo" itemLabel="#{equipo.name}" itemValue="#{equipo}"/> 
     <f:ajax event="change" listener="#{bean.updateSelected}" render="@form" execute="@form"/> 
    </h:selectOneMenu> 
</h:form> 

спасибо!

+0

Что произойдет, если вы удалите строку '<е: SelectItem ItemValue = "# {NULL}" itemLabel = "# {bean.message}"/>'? – thatsIch

+0

Я предполагаю, что основной проблемой является отсутствующий конвертер, но вы правы, значения «null» всегда подвержены ошибкам, поэтому я также предлагаю заменить его чем-то другим. –

ответ

0

Вы используете объекты типа Equipo в Java-компоненте, но компонент JSF обрабатывает только строки. Вы можете исправить это с помощью конвертера. Вот хорошее объяснение converters in general. В этом StackOverflow question есть примеры специально для JSF (как с PrimeFaces, так и без него).

Вы также можете принять конвертер OmniFaces. Это добавляет другую библиотеку, но после этого конвертер «автоматически» делает все для вас почти без особых усилий на вашей стороне.