JSP taglib中没有结束标记

时间:2012-06-28 18:29:24

标签: html jsp tags

<%@ 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编译器抱怨没有结束输入类型=“复选框”的<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来解决我的建筑师的死亡之痛lol。任何建议都会很乐意接受,以保留我提出的逻辑。

1 个答案:

答案 0 :(得分:1)

摆脱所有 scriptlet (oldschool <% %>事物)。它们与taglib不能很好地混合。 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>

通过这种方式,它的可读性也会立即提高。

另见: