【问题标题】:Checking/unchecking checkboxes based on returned database values根据返回的数据库值选中/取消选中复选框
【发布时间】:2016-07-13 07:35:23
【问题描述】:

我正在尝试根据从数据库返回的值来检查复选框。到目前为止,我的控制器层得到了正确的“Y”或“N”值,但该复选框没有被选中/取消选中。我尝试了以下但它不起作用,我认为测试场景有问题。

<td  class="normalTD " width="4%" style="white-space: nowrap" align="left" >
<c:choose>
<c:when test="detail[${loop.index}].flag eq 'Y'">
    <input type="checkbox" path="detail[${loop.index}].flag" id="detail[${loop.index}].flag" checked="checked" />
</c:when>
<c:otherwise>
    <input type="checkbox" path="detail[${loop.index}].flag" id="detail[${loop.index}].flag" checked="" />
</c:otherwise>
</c:choose>
</td>

复选框前循环:

<c:set var="detail" value="${commandObj.detail}" scope="page" />
    <c:if test="${!empty commandObj.detail}">
        <c:forEach items="${commandObj.detail}" var="detail" varStatus="loop">
            <c:if test="${!empty detail.cd}">

【问题讨论】:

  • 问题是什么?
  • 我有一个复选框,我希望根据我从数据库中获得的值来选中或取消选中它。因此,如果值为“Y”,我希望选中复选框,否则将保持未选中状态。这一切都将在页面加载时发生,而不是在表单提交时发生。
  • Chechbox 是否被选中取决于您使用的字段值,但您要么没有使用收件箱的标签或值,因此不会呈现该值检查。
  • 你指的是哪些标签?
  • 我正在使用的标签。

标签: html jsp jstl


【解决方案1】:

它有点旧,所以我想你已经找到了解决方案,但如果没有:

您可能需要检查来自 forEach 循环的detail var 的标志,detail 不是commandObj.detail,而是此列表/数组中的实例。您应该将 commandObj.detail 重命名为 commandObj.details 以区分实例和集合;)

此外,您应该使用三元条件来获得更易读的代码。条件很简单。

<c:forEach items="${commandObj.detail}" var="detail" varStatus="loop">
    <c:if test="${!empty detail.cd}">
        <input type="checkbox" 
               path="detail[${loop.index}].flag"
               id="detail[${loop.index}].flag" 
               ${"detail.flag eq 'Y'" ? "checked" : ""} 
        />

选中的属性不需要值,只需要存在或不存在即可。

我现在不能测试它写,如果有错误我忘了检查它,谢谢通知我。 :) (如果有这条线,我忘记了;))

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    相关资源
    最近更新 更多