<apptags:SQLIteratorTag query= "<%=myQuery%>" > myQuery 不返回任何结果会导致奇怪的 HTML 行为



我在Windows Server 2008上使用Tomcat7。

我的 JSP 页面中有以下两行

<apptags:SQLIteratorTag query="<%=myQuery%>">
</apptags:SQLIteratorTag>

如果myQuery返回至少一行,则我的 JSP 页面行为正常。如果myQuery没有返回任何行,那么我的 JSP 页面会从页面中复制一些文本(例如组合框的内容(并复制它!

我的想法如下:由于它从中复制的组合框是由查询填充的,因此在没有返回结果的查询的情况下,页面似乎抓取了不同查询的结果。

有没有人有任何想法如何解决这个问题?谢谢!

JSP主体中<%...%>的脚本通常很混乱。通过将 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 类,将查询结果存储在类型为 List 的变量myList中,并将其发送(获取/转发(到您的页面,该页面应仅显示值,而不显示其他任何内容:

<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而不是请求,则在同一页面上递归两次。

此外,如果您的 taglib apptags是您自己制作的,另一种可能性是它正在操纵不应该操作的标签。

如果没有看到更多页面,我敢打赌您使用的是与以下内容相同的变量名称:

%=myQuery%

因此,当没有返回查询结果时,它只是返回它的最后一个对象......即组合框。尝试为查询字符串名称指定一个不同的名称,例如 query1、query2 等,而不是所有 myQuery。

最新更新