【问题标题】:Issue with index order when using checkbox in JSP在 JSP 中使用复选框时出现索引顺序问题
【发布时间】:2021-09-19 22:30:55
【问题描述】:

我已经使用 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>

【问题讨论】:

标签: java jsp


【解决方案1】:

在您的实现中,您只会在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 也会有所帮助。

【讨论】:

  • 这是我想到的最后手段。我想避免它,但如果没有其他选择,那么我想我必须这样做。
  • 嗨@MR_AD。我明白。正如我所说,我的建议是您为复选框使用不同的值,而不是处理索引。 AFAIK,这是标准方法,它应该可以正常工作。也许您可以尝试使用 Javascript 并返回一个包含所有复选框以及是否选中它们的数组,但我发现它容易出错,并且您缺少表单:javascript 的复选框逻辑,我不知道...
【解决方案2】:

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>

【讨论】:

    猜你喜欢
    • 2020-04-05
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2020-02-27
    • 2021-12-05
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多