Во-первых, ваш h:dataTable
имеет три уровня глубины.Если вы хотите прикрепить флажок к свойству родительского управляемого компонента, вам необходимо принять во внимание все уровни.Итак,
<h:selectBooleanCheckbox value="#{bean.extraSelectedMap[category.id][item.id][extra.id]}"/>
с Map<Integer, Map<Integer, Map<Integer, Boolean>>>
в качестве свойства.В противном случае выбор будет переопределен для каждой категории, пока выбранные элементы последней категории не окажутся на карте.
Во-вторых, вам необходимо предварительно создать карту и все вложенные карты.JSF не сделает это для вас.Другими словами,
public Bean() {
extraSelectedMap = new HashMap<Integer, Map<Integer, Map<Integer, Boolean>>>();
for (Category category : categoryList) {
Map<Integer, Map<Integer, Boolean>> selectedExtrasPerCategory = new HashMap<Integer, Map<Integer, Boolean>>();
extraSelectedMap.put(category.getId(), selectedExtrasPerCategory);
for (Item item : category.getItemList()) {
Map<Integer, Boolean> selectedExtrasPerItem = new HashMap<Integer, Boolean>();
selectedExtrasPerCategory.put(item.getId(), selectedExtrasPerItem);
}
}
В качестве альтернативы, вы можете также просто добавить свойство Boolean
в Extra
и связать его с ним.