JSF选择许多复选框与富面重复/对齐



我正在尝试创建一个自定义时间表,其中一个活动可以在特定时间打开或关闭。

我现在有一个表,看起来像下面的

names | Time1|time2|time3|time4|
______________________________
name1 | box box box box box box 
name2 | box box box box box box

我想要的是盒子与相应的时间正确对齐。所以我想知道你是否可以打破selectManyCheckBoxes成不同的列?

其中代码为

<table>
                        <tr>
                            <th>&nbsp;</th>
                            <th>
                                <table class="times">
                                    <tr>
                                        <td>12:00 AM</td>
                                        <td>01:00 AM</td>
                                        <td>02:00 AM</td>
                                        <td>03:00 AM</td>
                                        <td>04:00 AM</td>
                                        <td>05:00 AM</td>
                                        <td>06:00 AM</td>
                                        <td>07:00 AM</td>
                                        <td>08:00 AM</td>
                                        <td>09:00 AM</td>
                                        <td>10:00 AM</td>
                                        <td>11:00 AM</td>
                                        <td>12:00 PM</td>
                                        <td>01:00 PM</td>
                                        <td>02:00 PM</td>
                                        <td>03:00 PM</td>
                                        <td>04:00 PM</td>
                                        <td>05:00 PM</td>
                                        <td>06:00 PM</td>
                                        <td>07:00 PM</td>
                                        <td>08:00 PM</td>
                                        <td>09:00 PM</td>
                                        <td>10:00 PM</td>
                                        <td>11:00 PM</td>
                                    </tr>
                                </table>
                            </th>
                        </tr>
                        <a4j:repeat value="#{scheduleNames}" var="scheduleName">
                            <tr>
                                <td>
                                    <h:outputText value="#{scheduleName}" />
                                </td>
                                <td>
                                    <h:selectManyCheckbox styleClass="styledGroup" value="#{schedules[scheduleName]}">
                                        <f:selectItem itemLabel="12:00 AM" itemValue="0" />
                                        <f:selectItem itemLabel="01:00 AM" itemValue="1" />
                                        <f:selectItem itemLabel="02:00 AM" itemValue="2" />
                                        <f:selectItem itemLabel="03:00 AM" itemValue="3" />
                                        <f:selectItem itemLabel="04:00 AM" itemValue="4" />
                                        <f:selectItem itemLabel="05:00 AM" itemValue="5" />
                                        <f:selectItem itemLabel="06:00 AM" itemValue="6" />
                                        <f:selectItem itemLabel="07:00 AM" itemValue="7" />
                                        <f:selectItem itemLabel="08:00 AM" itemValue="8" />
                                        <f:selectItem itemLabel="09:00 AM" itemValue="9" />
                                        <f:selectItem itemLabel="10:00 AM" itemValue="10" />
                                        <f:selectItem itemLabel="11:00 AM" itemValue="11" />
                                        <f:selectItem itemLabel="12:00 PM" itemValue="12" />
                                        <f:selectItem itemLabel="01:00 PM" itemValue="13" />
                                        <f:selectItem itemLabel="02:00 PM" itemValue="14" />
                                        <f:selectItem itemLabel="03:00 PM" itemValue="15" />
                                        <f:selectItem itemLabel="04:00 PM" itemValue="16" />
                                        <f:selectItem itemLabel="05:00 PM" itemValue="17" />
                                        <f:selectItem itemLabel="06:00 PM" itemValue="18" />
                                        <f:selectItem itemLabel="07:00 PM" itemValue="19" />
                                        <f:selectItem itemLabel="08:00 PM" itemValue="20" />
                                        <f:selectItem itemLabel="09:00 PM" itemValue="21" />
                                        <f:selectItem itemLabel="10:00 PM" itemValue="22" />
                                        <f:selectItem itemLabel="11:00 PM" itemValue="23" />
                                    </h:selectManyCheckbox>
                                </td>
                            </tr>
                        </a4j:repeat>
                    </table>

和schedule是一个Map<String, List<Integer>>

<h:selectManyCheckbox>自行呈现<table>。所以你最终在一个单独的<td>中有另一个<table>,而不是在单独的<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>
...

List<Integer>不适合设置,因为<h:selectBooleanCheckbox>必须是BooleanList<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);
    }
}

最新更新