Основные лица selectOneMenu не работает, когда это должно
Я теряю дни с этой странной проблемой, я дважды проверил все, но мой 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, но я не могу получить выбранное значение в режиме просмотра / редактирования.
Что я делаю неправильно?
Заранее спасибо!
1 ответ
Это может произойти, если 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()
контракт.