Как UISelectOne и UISelectMany компоненты предварительно выбирают значения по умолчанию в f: selectItems

Я знаю, как предварительно

, в выбранном value должен быть один из объектов из , но как этот компонент работает под капотом и могу ли я изменить это поведение?

В моем случае у меня есть дублирующийся объект, на самом деле это два объекта с одинаковыми значениями, но созданные дважды, а выбранный объект в

отличается от объекта от и он не распознает его. Скорее всего, я изменю свой дизайн, поэтому он будет указывать на один и тот же объект, но если я не смогу это сделать из-за устаревшего кода или т. Д., Как я могу изменить поведение

что он будет сравнивать объекты по id например?

Я думал, что этот converter отвечает за него, но когда он визуализируется, он не getAsObject метод getAsString только getAsString , поэтому я предполагаю, что есть что-то другое, но что?

спасибо

    One Solution collect form web for “Как UISelectOne и UISelectMany компоненты предварительно выбирают значения по умолчанию в f: selectItems”

    Для этого используется Object#equals() . Вы можете изменить (исправить) это поведение, выполнив его соответствующим образом на своем объекте.

     private Long id; @Override public boolean equals(Object other) { return (other != null && getClass() == other.getClass() && id != null) ? id.equals(getClass().cast(other).id) : (other == this); } 

    Не забывайте hashCode() чтобы удовлетворить контракт equals-hashCode .

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

    Если вы не можете изменить существующий объект по какой-то непонятной причине, оберните его в свой собственный DTO.

    Конвертер преобразует только объект и его уникальное представление String для использования в результатах вывода HTML и HTTP-запроса и поэтому не влияет на предварительный выбор. Он влияет только на потенциальную ошибку проверки: значение не является допустимой проблемой.

    Смотрите также:

    • Как заполнить параметры h: selectOneMenu из базы данных?
    Давайте будем гением компьютера.