У меня проблемы с пониманием того, как эффективно использовать выбор в JSF 2 с POJO/сущностью. Например, я пытаюсь выбрать объект Warehouse через раскрывающееся меню ниже:
<h:selectOneMenu value="#{bean.selectedWarehouse}">
    <f:selectItem itemLabel="Choose one .." itemValue="#{null}" />
    <f:selectItems value="#{bean.availableWarehouses}" />
</h:selectOneMenu>
И ниже управляемый bean:
@Named
@ViewScoped
public class Bean {
    private Warehouse selectedWarehouse;
    private List<SelectItem> availableWarehouses;
    // ...
    @PostConstruct
    public void init() {
        // ...
        availableWarehouses = new ArrayList<>();
        for (Warehouse warehouse : warehouseService.listAll()) {
            availableWarehouses.add(new SelectItem(warehouse, warehouse.getName()));
        }
    }
    // ...
}
Обратите внимание, что я использую весь объект Warehouse как значение SelectItem.
Когда я отправляю форму, это происходит с сообщением следующих лиц:
Значение ошибки конверсии '[email protected]' для 'null Converter'.
Я надеялся, что JSF может просто установить правильный объект Warehouse для моего управляемого bean, когда я оберну его в SelectItem. Обертка моего объекта внутри SelectItem означала пропустить создание Converter для моего объекта.
Нужно ли мне использовать Converter, когда я хочу использовать объекты в моем <h:selectOneMenu>? Для JSF необходимо просто извлечь выбранный элемент из списка доступных элементов. Если мне действительно нужно использовать конвертер, какой практический способ это сделать? До сих пор я подошел к этому:
-  Создайте реализацию Converterдля объекта.
-  Переопределение getAsString(). Я думаю, что мне это не нужно, так как свойство меткиSelectItemбудет использоваться для отображения метки выпадающего списка.
-  Переопределение getAsObject(). Я думаю, что это будет использоваться для возврата правильногоSelectItemили объекта в зависимости от типа выбранного поля, определенного в управляемом bean.
 getAsObject() меня смущает. Каков эффективный способ сделать это? Имея строковое значение, как мне получить связанный объект объекта? Должен ли я запрашивать объект объекта из объекта службы на основе значения строки и возвращать объект? Или, возможно, каким-то образом я могу получить доступ к списку объектов, которые формируют элементы выбора, зацикливать их, чтобы найти правильный объект, и вернуть объект?
Каков нормальный подход?
