【问题标题】:JSP c:forEach items attribute cannot resolve variableJSP c:forEach 项目属性无法解析变量
【发布时间】:2014-01-12 18:30:54
【问题描述】:

我在我的 JSP 项目中使用 javax.servlet.jsp.jstl-1.2.1 lib。

这是我的代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
// other classes are included too
<%
Tools tools = new Tools();
news [] list = tools.getEvent();
%>

<html>
<body>

<c:forEach var="i" items="${list}"> <-- cannot resolve variable 'list', why?
/* Do something */
</c:forEach>

</body
</html>

如您所见,'list' 变量 extsts 但对于 forEach 不可见。我错过了什么? c:out 工作正常。 它会因java.lang.ClassNotFoundException: org.apache.jsp.index_jsp 签名而崩溃。

奇怪的事情发生了...... 我试图执行这个:

<c:forEach var="i" begin="1" end="5">
    <c:out value="works"/>
</c:forEach>

但我得到了同样的错误..

【问题讨论】:

  • 你为什么要把 scriplets 和 JSTL 混为一谈?您不能在 EL 表达式中使用在 scriplets 中定义的变量。而是将对象添加为请求属性。
  • @Rohit 谢谢,请阅读主题更新

标签: java jsp servlets


【解决方案1】:

如果您正在运行 servlet 2.3 容器或更高版本(我相信您是),那么 JSTL 1.2(可能更高版本)应该可以在您的 JSP 页面中使用。您不需要将 JSTL JAR 添加到您的部署中。事实上,Tomcat 的默认配置将显式忽略部署 JAR 中以 javax.servlet.* 开头的任何类,并改用其自己的版本。

要对表达式语言 (EL) 可用,该值必须是页面上下文、请求对象、会话对象或 servlet 上下文的属性。

将您的值公开为页面上下文属性:

<%
Tools tools = new Tools();
news [] list = tools.getEvent();
pageContext.setAttribute("list", list);
%>

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 2013-05-16
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2013-05-13
    • 1970-01-01
    相关资源
    最近更新 更多