Не забывайте, что в этом случае доступные элементы должны быть списком. Мы использовали 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()
смущает меня Каков эффективный способ сделать это? Имея строковое значение, как я могу получить связанный объект сущности? Должен ли я запросить объект сущности из сервисного объекта на основе строкового значения и вернуть сущность? Или, возможно, каким-то образом я могу получить доступ к списку сущностей, которые формируют элементы выбора, зациклить их, чтобы найти правильную сущность, и вернуть сущность?
Каков нормальный подход к этому?