Не забывайте, что в этом случае доступные элементы должны быть списком. Мы использовали HashMap и изменили его на List.

я проблемы с пониманием того, как эффективно использовать выделение в JSF 2 с POJO / сущностью. Например, я пытаюсь выбратьWarehouse сущность через раскрывающийся список:

<h:selectOneMenu value="#{bean.selectedWarehouse}">
    <f:selectItem itemLabel="Choose one .." itemValue="#{null}" />
    <f:selectItems value="#{bean.availableWarehouses}" />
</h:selectOneMenu>

И ниже управляемый боб:

@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.

Когда я отправляю форму, это терпит неудачу со следующим сообщением лиц:

Значение параметра Ошибка преобразования 'com.example.Warehouse@cafebabe' для 'нулевого конвертера'.

Я надеялся, что JSF может просто установить правильныйWarehouse возражать против моего управляемого боба, когда я обернуть его вSelectItem, Заворачивая мою сущность вSelectItem должен был пропустить созданиеConverter для моей сущности.

Я действительно должен использоватьConverter всякий раз, когда я хочу использовать сущности в моем<h:selectOneMenu>? Для JSF должно быть возможно просто извлечь выбранный элемент из списка доступных элементов. Если мне действительно нужно использовать конвертер, каков практический способ сделать это? До сих пор я дошел до этого:

СоздатьConverter реализация для субъекта.ПереопределениеgetAsString(), Я думаю, что мне это не нужно, так как свойство labelSelectItem будет использоваться для отображения метки выпадающего списка.ПереопределениеgetAsObject(), Я думаю, что это будет использоваться, чтобы вернуть правильныйSelectItem или объект в зависимости от типа выбранного поля, определенного в управляемом компоненте.

getAsObject() смущает меня Каков эффективный способ сделать это? Имея строковое значение, как я могу получить связанный объект сущности? Должен ли я запросить объект сущности из сервисного объекта на основе строкового значения и вернуть сущность? Или, возможно, каким-то образом я могу получить доступ к списку сущностей, которые формируют элементы выбора, зациклить их, чтобы найти правильную сущность, и вернуть сущность?

Каков нормальный подход к этому?

Ответы на вопрос(2)

Ваш ответ на вопрос