Primefaces SelectOneMenu с объектами из списка переворачивается при выборе

Метод установки selectedRestaurant вызывается, но меню просто переворачивается и не отображает <h:outputText>. В меню есть содержимое, поэтому список, используемый в <f:selectItems>, не пуст. Поскольку я использую omnifaces.SelectItemsConverter, я полагаю, что это не связано с проблемой преобразования.

Это мой код JSF:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
<h:head />
<h:body>
    <h:panelGroup id="adminOneMenu" layout="block">
    <h:form>

    <p:selectOneMenu value="#{bugBean.selectedRestaurant}" converter="omnifaces.SelectItemsConverter">
        <f:selectItem itemValue="" itemLabel="Restaurant wählen"/> 
        <f:selectItems value="#{bugBean.restaurants('London')}" var="restaurant" itemLabel="#{restaurant.screenName}"/>
        <p:ajax update=":adminOneMenu"/>
    </p:selectOneMenu>  

    <h:outputText value="#{bugBean.selectedRestaurant.screenName}" />
    </h:form>
    </h:panelGroup>

</h:body>
</html>

Это поддерживающий компонент:

package huhu.main.managebean;

import java.io.Serializable;
import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

import huhu.model.generated.Restaurant;
import huhu.service.RestaurantService;

@Named
@SessionScoped
public class BugBean implements Serializable {

   private static final long serialVersionUID = 1L;
   private Restaurant selectedRestaurant;

   @EJB
   RestaurantService rs;

   public List<Restaurant> getRestaurants(String city){
       List<Restaurant> restaurants;
       restaurants = rs.getRestaurantsInCity(city);
       return restaurants;
   }

   public Restaurant getSelectedRestaurant() {
      return selectedRestaurant;
   }

   public void setSelectedRestaurant(Restaurant selectedRestaurant) {
      this.selectedRestaurant = selectedRestaurant;
   }
}

person Lester    schedule 06.11.2012    source источник


Ответы (1)


Если будет ошибка преобразования, вы должны получить сообщение об ошибке.

Вы реализовали #equals() и #hashcode() в классе Restaurant?

person stg    schedule 06.11.2012
comment
Нет сообщения об ошибке, нет реализации #equals() и #hashcode(). Не должно быть необходимости с omnifaces.SelectItemsConverter, не так ли? - person Lester; 07.11.2012
comment
Не обязательно для преобразования, но необходимо для selectOneMenu. Primefaces selectOneMenu проверяет, есть ли выбранный ресторан в списке выбранных вами элементов. Если #equals() не реализовано, это может не сработать. - person stg; 07.11.2012
comment
Это объект, сгенерированный из таблицы базы данных. Как я могу реализовать их без необходимости вручную редактировать их всякий раз, когда я их заново генерирую? - person Lester; 07.11.2012
comment
Скажите генератору реализовать их автоматически. Eclipse, например, может это сделать. - person BalusC; 07.11.2012