<h:selectManyCheckbox>
отображает само по себе <table>
. Таким образом, вы получите еще один <table>
в одном <td>
вместо того, чтобы иметь все элементы в отдельных <td>
с.
Вместо этого используйте <h:selectBooleanCheckbox>
. Сначала измените тип свойства Map<String, List<Integer>>
на Map<String, Boolean[]>
(и убедитесь, что вы подготовили его с new Boolean[24]
!). Затем измените представление следующим образом:
<td><label><h:selectBooleanCheckbox value="#{schedules[scheduleName][0]}" /> 12:00AM</label></td>
<td><label><h:selectBooleanCheckbox value="#{schedules[scheduleName][1]}" /> 13:00AM</label></td>
<td><label><h:selectBooleanCheckbox value="#{schedules[scheduleName][2]}" /> 14:00AM</label></td>
<td><label><h:selectBooleanCheckbox value="#{schedules[scheduleName][3]}" /> 15:00AM</label></td>
...
A List<Integer>
не подходит, поскольку значение <h:selectBooleanCheckbox>
должно быть Boolean
. List<Boolean>
является неуклюжим, потому что вам нужно заранее заполнить его 24 Boolean.FALSE
записями, чтобы избежать проблем ArrayIndexOutOfBounds
. Итак, Boolean[]
должен сделать.
schedules.put(scheduleName, new Boolean[24]);
// ...
и вы можете снова обработать его до List<Integer>
следующим образом:
Boolean[] checkedHours = schedules.get(scheduleName);
List<Integer> hours = new ArrayList<Integer>();
for (int i = 0; i < checkedHours.length; i++) {
if (checkedHours[i]) {
hours.add(i);
}
}