Вопрос по jsf-2, primefaces – основные лица selectOneMenu не работает, когда это должно [дублировать]

3

This question already has an answer here:

How do UISelectOne and UISelectMany components preselect defaults in f:selectItems 1 answer

Я теряю дни с этой странной проблемой, я дважды проверил все, но мой selectOneMenu просто не работает, и я не могу понять, почему.

Итак, вот мои коды:

Мой JSF

<p:selectOneMenu id="entityType"  
      value="#{entityBean.entity.type}" 
      style="width:240px;" 
      converter="entityTypeConverter"
      valueChangeListener="#{entityBean.entityTypeListener}"
      required="true">
      <f:selectItems value="#{entityBean.typeList}"
              var="et"
              itemLabel="#{et.name}"
              itemValue="#{et}" />
</p:selectOneMenu>

Мой конвертер:

    @FacesConverter("entityTypeConverter")
    public class EntityTypeConverter implements Converter {
        public Object getAsObject(FacesContext context, UIComponent component, String value) {
            if (value == null || value.length() == 0) {
                return null;
            }
            Long id = Long.parseLong(value);

            return EntityType.findEntityType(id);
        }

        public String getAsString(FacesContext context, UIComponent component, Object value) {

            return value instanceof EntityType ? ((EntityType) value).getId().toString() : "";
        }
    }

Он работает, как и ожидалось, когда я создаю (он передает выбранное значение), но когда я пытаюсь редактировать сущность, выбранный тип фактически никогда не выбирается. Я пробовал с простыми главами 3.1.1 и 3.2, но я не могу получить выбранное значение в режиме просмотра / редактирования.

Что я делаю неправильно?

Заранее спасибо!

Entity и entityType - это просто фантазийные имена loop0.brs
использованиеp:ajax вместо valueChangeListener ... Daniel
Та же проблема без значенияChangeListener. Моя проблема заключается в том, чтобы получить значение, выбранное при загрузке страницы редактирования. Я думаю, что значение = & quot; # {entityBean.entity.type} & quot; и конвертер должен сделать это, но, очевидно, это не работает со мной. loop0.brs

Ваш Ответ

1   ответ
10

Это может произойти, еслиequals() метод вашегоEntityType класс отсутствует или сломан. Учитывая тот факт, что выid собственность в вашемEntityType класс, который, кажется, идентифицирует экземпляр достаточно уникально, следующая минимальная реализация должна сделать это для вас:

@Override
public boolean equals(Object other) {
    return (other instanceof EntityType) && (id != null)
        ? id.equals(((EntityType) other).id)
        : (other == this);
}

@Override
public int hashCode() {
    return (id != null)
        ? (this.getClass().hashCode() + id.hashCode())
        : super.hashCode();
}

hashCode() просто обязательно в соответствии сequals() контракт.

Error: User Rate Limit Exceeded loop0.brs
Error: User Rate Limit Exceeded

Похожие вопросы