0
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<td colspan="1" width="100">
<c:choose>
  <c:when>
    <c:choose>
       <c:when></c:when><c:otherwise>
    <c:when test="<%=\"F\".equals(result[1]) %>">
     <c:set var="checked"><%=result[0].equals("Y")%></c:set>
     <input type="checkbox" id="<%="ABC"+"$"+rows%>" name="<%="ABC"+"$"+rows%>" value="<%=String.valueOf(rows)%>" ${checked ? 'checked' : ''} onclick="someFunction(this)"/>
    </c:when></c:otherwise>
    </c:choose>
  </c:when>    
  <c:otherwise>
  </c:otherwise>
</c:choose>
</td>

出于某种原因,JSP 编译器抱怨嵌套输入 type="checkbox" 的没有结束标记<c:when>...我可以知道我做错了什么吗?我尝试使用<c:if>它也不起作用,编译器也抱怨没有结束标签。

编辑:如果我没有像下面那样嵌套输入类型和 set var,那么它可以工作......但它无法完成我原来的逻辑..

    <c:otherwise>
            <c:when test="<%=\"F\".equals(result[1]) %>">
            </c:when>
            <c:set var="checked"><%=result[0].equals("Y")%></c:set>
             <input type="checkbox" id="<%="ABC"+"$"+rows%>" name="<%="ABC"+"$"+rows%>" value="<%=String.valueOf(rows)%>" ${checked ? 'checked' : ''} onclick="someFunction(this)"/>
    </c:otherwise>

编辑 2:我必须以这种方式编写 jsp 代码,以免我的建筑师死亡之痛,哈哈。任何建议都会很乐意接受以保留我提出的逻辑。

4

1 回答 1

1

只需摆脱所有这些小脚本(老式的<% %>东西)。它们不能与标签库很好地混合。JSTL 属性仅采用 EL 表达式。

例如,假设您request.setAttribute("results", results)事先已经完成了一个设计,从技术上讲需要在 servlet 中完成,但也可以在JSP 顶部的某个scriptlet中完成。

<c:forEach items="${results}" var="result">
  ...
  <td colspan="1" width="100">
    <c:choose>
      <c:when>
        <c:choose>
          <c:when></c:when>
          <c:otherwise>
            <c:when test="${result[1] == 'F'}">
              <c:set var="checked">${result[0] == 'Y'}</c:set>
              <input type="checkbox" id="ABC$${rows}" name="ABC$${rows}" value="${rows}" ${checked ? 'checked' : ''} onclick="someFunction(this)" />
            </c:when>
          </c:otherwise>
        </c:choose>
      </c:when>    
      <c:otherwise>
      </c:otherwise>
    </c:choose>
  </td>
  ...
</c:forEach>

通过这种方式,它的可读性也更好。

也可以看看:

于 2012-06-28T18:40:11.190 回答