В моем классе Entity у меня есть HashMap. Теперь я пытаюсь создать выбор этой карты, чтобы иметь возможность выбирать объекты. Поэтому я создал следующие классы:
Конвертер лошадей:
@Named
public class HorseConverter implements Converter{
@EJB
private HorseBean bean;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return bean.getHorse(Long.valueOf(value));
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if(!(value instanceof Horse)){
throw new ConverterException(new FacesMessage("Object is not a Horse"));
} else {
Horse h = (Horse) value;
return Long.toString(h.getId());
}
}
}
Сущность гонки:
public Map<Horse, Integer> getHorses() {
return horses;
}
public void setHorses(HashMap<Horse, Integer> horses) {
this.horses = horses;
}
И мое мнение:
Horse:
<h:selectOneMenu value="#{betController.horse}" converter="#{horseConverter}">
<f:selectItems value="#{raceController.selectedRace.horses}" var="h" itemLabel="#{h.nickName}" itemValue="#{h}"/>
</h:selectOneMenu>
Похоже, что значение, которое я получаю, не является экземпляром Horse. Я проверил следующую ссылку: https://stackoverflow.com/tags/selectonemenu/info Итак, кажется, что ключ автоматически используется как значение. Но даже запись h.key ничего не меняет.
РЕДАКТИРОВАТЬ: Вот мой хэш и код равных из Horse Entity:
@Override
public int hashCode() {
int hash = 7;
hash = 97 * hash + (int) (this.id ^ (this.id >>> 32));
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Horse other = (Horse) obj;
if (this.id != other.id) {
return false;
}
return true;
}