JSP 主体中的Scriptlet<%...%>
通常是杂乱无章的。可以通过将JSTL @taglib
与EL ${...}
一起使用来完全避免它们,这是在 JSP 中迭代查询结果的干净且强烈推荐的方法。
下载jstl-api.jar 和 jstl-impl.jar,将它们放入你的 lib 文件夹并添加到页面顶部:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
对于查询部分,将所有处理留给 Java 类,将查询结果存储在myList
类型变量中List
并将其发送(get/post forward)到您的页面,它应该只显示值而不是其他内容:
<c:forEach items="${myList}" var="product" varStatus="status">
Product number ${status.count}: ${product}<br />
</c:forEach>
这应该足以避免页面中出现意外行为。如果没有行,它将什么也不做。但是,如果您仍然想检查,则不必再次进行查询,因为它的结果已经在里面myList
:
<c:if test="${fn:length(myList) != 0}">
<c:forEach items="${myList}" var="product" varStatus="status">
Product number ${status.count}: ${product}<br />
</c:forEach>
</c:if>
或者使用${noCompanySelected}
代替${fn:length(myList) != 0}
,如果那真的是你的条件。
...您可能需要验证的其他事项:
您myQuery
正在被其他东西或应用程序中的其他地方重用......或者如果您myQuery
在会话而不是请求中创建,则被同一页面递归两次。
此外,如果您的 taglibapptags
是您自己制作的,另一种可能性是它正在操作不应该的标签。