У меня проблемы с пониманием того, как эффективно использовать выделение в JSF 2 с POJO / entity. Например, я пытаюсь выбрать сущность 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
.
Когда я отправляю форму, это не удается со следующим сообщением:
Значение параметра «Ошибка преобразования»com.example.Warehouse@cafebabe'для' null Converter '.
Я надеялся, что JSF сможет просто установить правильный объект Warehouse
для моего управляемого bean-компонента, когда я заключу его в SelectItem
. Помещение моей сущности в SelectItem
означало пропустить создание Converter
для моей сущности.
Мне действительно нужно использовать Converter
, когда я хочу использовать сущности в моем
? Для JSF должно быть возможно просто извлечь выбранный элемент из списка доступных элементов. Если мне действительно нужно использовать конвертер, как это сделать на практике? Пока я подошел к следующему:
Converter
для объекта. getAsString ()
. Я думаю я не В этом нет необходимости, поскольку свойство метки SelectItem
будет использоваться для отображения метки раскрывающегося списка. getAsObject ()
. Я думаю, это будет использоваться для возврата правильного SelectItem
или объекта в зависимости от типа выбранного поля, определенного в управляемом компоненте. getAsObject ()
меня смущает. Как это сделать эффективнее? Имея строковое значение, как мне получить связанный объект сущности? Должен ли я запрашивать объект сущности из объекта службы на основе строкового значения и возвращать сущность? Или, возможно, каким-то образом я могу получить доступ к списку сущностей, которые образуют элементы выбора, зациклить их, чтобы найти правильную сущность, и вернуть объект?
Каков обычный подход?