Сделать List<Category>
свойством сущности Question
.
@Entity
public class Question {
@OneToMany
private List<Category> categories;
// ...
}
с
<h:selectManyMenu value="#{question.categories}" converter="#{categoryConverter}">
<f:selectItems value="#{data.categories}" />
</h:selectManyMenu>
Необходимо предоставить преобразователь только для класса Category
.
@ManagedBean
@RequestScoped
public class CategoryConverter implements Converter {
@EJB
private CategoryService categoryService;
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (!(value instanceof Category) || ((Category) value).getId() == null) {
return null;
}
return String.valueOf(((Category) value).getId());
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value == null || !value.matches("\\d+")) {
return null;
}
return categoryService.find(Long.valueOf(value));
}
}
(примечание: пока в JSF 2.2 невозможно внедрить @EJB
в @FacesConverter
, поэтому вместо этого @ManagedBean
, см. Также Связь в JSF 2.0 -Преобразование и проверка параметров запроса GET )
Вам не нужно дублировать выбранные элементы в управляемом компоненте или что-то еще.