问题定义:JSTL 标记在我的 JSP 中工作,但 forEach 除外。行为是它忽略请求对象。它适用于在页面上创建的对象,但对于来自请求的对象则失败。我无知的观点是它似乎没有检测到请求对象。通过确认 scriplet 和一些 Java 代码确认 ArrayList 到达 JSP,我可以为您节省很多问题,我什至逐项处理它并证明列表形状良好。 请放心,该列表确实会进入 JSP,并且我目前依靠 scriplet 来使应用程序正常工作。
话虽这么说,这是我的(有问题?)配置:
Tomcat 10.1.25
WEB-INF/lib/jakarta.servlet.jsp.jstl-3.0.1.jar,jakarta.servlet.jsp.jstl-api-3.0.0.jar
在 JSP 标头中:<%@taglib prefix="c" uri="jakarta.tags.core"%>
有问题的 forEach 循环:
<c:forEach items="${prodList}" var="prods">
<c:out value="Inside forEach ..."/>
<c:out value="${prods.prodID}"/>
<c:out value="${prods.prodName}"/>
</c:forEach>
Servlet: request.setAttribute("prods", prodList);
项目部署组件:/src/main/webapp = /
项目构建路径有两个 JSTL jars
奇怪的是,当我打字时
这东西让我想把我剩下的头发扯下来。
底线是 scriptlet 可以工作,而标签则不能。该标记似乎只是忽略任何请求对象。是的,其他标签也可以。这是关于 forEach 的。
我感觉自己像个白痴,但我已经颠倒了项目和变量! JSTL 库没有任何问题,只是当我盯着项目为 EMPTY 的问题时,我的大脑出现了错误。空 items 对象意味着什么也没有发生,就好像 forEach 是脑死亡一样。 事实并非如此。 它正在做我要求它做的事情!