在 JSP 中使用复选框时出现索引顺序问题

Issue with index order when using checkbox in JSP

我已经使用 jsp form:checkbox 定义了行和列,如下面的代码所示。我正在使用 List 来捕获条目。使用 form:checkbox 的问题是它没有正确索引。当我使用 form:input 时,输入索引是正确的。我可以做些什么来正确捕获索引吗?通过索引,我的意思是当我输入 form:input 时,我看到变量“a”有 12 个值,并且还显示了未输入的值,但是 form:checkbox 我没有看到 12 个值,并且顺序是随机的。

控制器中的代码

private List<String> a;

JSP

中的代码
<tr>
    <th class="text-center">JAN</th>
    <th class="text-center">FEB</th>
    <th class="text-center">MAR</th>
    <th class="text-center">APR</th>
    <th class="text-center">MAY</th>
    <th class="text-center">JUN</th>
    <th class="text-center">JUL</th>
    <th class="text-center">AUG</th>
    <th class="text-center">SEP</th>
    <th class="text-center">OCT</th>
    <th class="text-center">NOV</th>
    <th class="text-center">DEC</th>
</tr>
<tr>
    <td><form:checkbox path="a" value="Y"/></td>
    <td><form:checkbox path="a" value="Y"/></td>
    <td><form:checkbox path="a" value="Y"/></td>
    <td><form:checkbox path="a" value="Y"/></td>
    <td><form:checkbox path="a" value="Y"/></td>
    <td><form:checkbox path="a" value="Y"/></td>
    <td><form:checkbox path="a" value="Y"/></td>
    <td><form:checkbox path="a" value="Y"/></td>
    <td><form:checkbox path="a" value="Y"/></td>
    <td><form:checkbox path="a" value="Y"/></td>
    <td><form:checkbox path="a" value="Y"/></td>
    <td><form:checkbox path="a" value="Y"/></td>
</tr>

在您的实施中,您只会在 List 中收到已选中的复选框的值,没有任何顺序。

请注意实际的复选框值,而不是处理索引。试试这个:

<tr>
    <th class="text-center">JAN</th>
    <th class="text-center">FEB</th>
    <th class="text-center">MAR</th>
    <th class="text-center">APR</th>
    <th class="text-center">MAY</th>
    <th class="text-center">JUN</th>
    <th class="text-center">JUL</th>
    <th class="text-center">AUG</th>
    <th class="text-center">SEP</th>
    <th class="text-center">OCT</th>
    <th class="text-center">NOV</th>
    <th class="text-center">DEC</th>
</tr>
<tr>
    <td><form:checkbox path="a" value="jan"/></td>
    <td><form:checkbox path="a" value="feb"/></td>
    <td><form:checkbox path="a" value="mar"/></td>
    <td><form:checkbox path="a" value="apr"/></td>
    <td><form:checkbox path="a" value="may"/></td>
    <td><form:checkbox path="a" value="jun"/></td>
    <td><form:checkbox path="a" value="jul"/></td>
    <td><form:checkbox path="a" value="aug"/></td>
    <td><form:checkbox path="a" value="sep"/></td>
    <td><form:checkbox path="a" value="oct"/></td>
    <td><form:checkbox path="a" value="nov"/></td>
    <td><form:checkbox path="a" value="dec"/></td>
</tr>

当用户提交信息时,您的 a List 将包含所选月份的不同文字作为值,janapr 等。

我认为 this article 也有帮助。

Spring 支持 path 属性的数组访问,所以你可以这样做:

Java:

private boolean[] a = new boolean[12];

JSP:

<tr>
    <th class="text-center">JAN</th>
    <th class="text-center">FEB</th>
    <th class="text-center">MAR</th>
    <th class="text-center">APR</th>
    <th class="text-center">MAY</th>
    <th class="text-center">JUN</th>
    <th class="text-center">JUL</th>
    <th class="text-center">AUG</th>
    <th class="text-center">SEP</th>
    <th class="text-center">OCT</th>
    <th class="text-center">NOV</th>
    <th class="text-center">DEC</th>
</tr>
<tr>
    <td><form:checkbox path="a[0]"/></td>
    <td><form:checkbox path="a[1]"/></td>
    <td><form:checkbox path="a[2]"/></td>
    <td><form:checkbox path="a[3]"/></td>
    <td><form:checkbox path="a[4]"/></td>
    <td><form:checkbox path="a[5]"/></td>
    <td><form:checkbox path="a[6]"/></td>
    <td><form:checkbox path="a[7]"/></td>
    <td><form:checkbox path="a[8]"/></td>
    <td><form:checkbox path="a[9]"/></td>
    <td><form:checkbox path="a[10]"/></td>
    <td><form:checkbox path="a[11]"/></td>
</tr>