Проблема была с моим бобом.Чтобы получить выбранный элемент, мне пришлось реализовать пользовательскую реализацию интерфейса javax.faces.Converter
.На мой взгляд, для такой простой задачи достаточно много работы (этот конвертер должен иметь доступ к источнику данных и т. Д.).Итак, я сделал небольшой трюк:
public class CategoryBean{
private list<Category> availableCategories;
private Category selectedCategory;
public Long getCSelectedCategory(){
// Get selected category by it's id and set selectedCategory
}
public void setSelectedCategory(Long selectedCategory){
return selectedCategory.getId();
}
// The remaining setters and getters
}
И соответствующий фрагмент кода страницы теперь выглядит так:
<p:column>
<p:selectOneMenu id="categorySelect" effect="drop"
value="#{categoryBean.selectedCategory}" >
<f:selectItems value="#{categoryBean.availableCategories}"
var="category" itemLabel="#{category.name}"
itemValue="#{category.id}" />
</p:selectOneMenu>
</p:column>
Пожалуйста, обратите внимание на атрибут itemValue
иметоды доступа, которые показаны. У меня была неправильная ошибка типа возвращаемого значения.
Заключение , единственная проблема с динамическим добавлением новых компонентов Primefaces в моем случае заключалась в возврате выбранного значения.Вы можете реализовать конвертер или использовать подобный прием.
Является ли такой прием хорошим решением по вашему мнению?