<%@ 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>
并且它也不起作用,编译器也抱怨没有结束标记。
<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。任何建议都会很乐意接受,以保留我提出的逻辑。
答案 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>
通过这种方式,它的可读性也会立即提高。