JSF2: selectOneMenu с пользовательскими элементами select: все элементы выделены - PullRequest
2 голосов
/ 21 октября 2010

Благодаря некоторым замечательным статьям, я смог создать <h:selectOneMenu /> с объектами selectItems, содержащими объекты. После предоставления пользовательского FacesConverter и исправления недостающих методов equals () / hashcode () я могу использовать его для изменения свойства базового компонента и его записи в БД.

Единственная странная вещь состоит в том, что все HTML <option /> элементы <select /> -элемента checked="checked"! Другими словами: <h:selectOneMenu /> не отражает текущее значение связанного свойства!

подробности:

Store.java

@Entity
public class Store {
  private Long id;
  private String name;

  @ManyToOne
  private Category category;

  // getters, setters, equals, hashcode
}

Category.java

@Entity
public class Category {
  private Long id;
  private String name;

  // getters, setters, equals, hashcode
}

editStore.xhtml

<h:form>
....
  <h:selectOneMenu value="#{backingBean.store.category}" id="category">
    <f:selectItems value="#{backingBean.categorySelectItems}" />
  </h:selectOneMenu>
....
</h:form>

BackingBean.java

public class BackingBean {
  private Store store;

  // inject data-access-facades via @EJB
  // Constructor
  // getters, setters

  public List<SelectItem> getCategorySelectItems
    List<SelectItem> items = new ArrayList<SelectItem>();
    for (Category cat : categoryFacade.findAll() ) {
      items.add(new SelectItem(cat, cat.getName()));
    }
    return items;
  }

  // action methods
}

Я пропускаю перечисление Category-Converter (он конвертирует объект и его идентификатор).

HTML-код, который он создает:

<select id="category" name="category" size="1">
  <option value="251" selected="selected">Kosmetik</option>
  <option value="222" selected="selected">Sportwaren</option>
</select>

Очевидно, что store.category может содержать только один элемент ... почему оба параметра-элемента "выбраны"? Независимо от того, какая категория назначена магазину, HTML всегда «выбирает» все option-элементы.

Как теперь JSF, какой SelectItem должен быть выбран?

1 Ответ

5 голосов
/ 21 октября 2010

Почти наверняка проблема в методе equals(..), который возвращает true для всех сравниваемых объектов.Проверьте это, и пусть ваша IDE сгенерирует метод (вместе с hashCode())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...