1

我正在尝试将一个List<String[]>对象传递给我的 jsp 页面并使用 jstl 处理它。

我的小服务程序:

request.setAttribute("rows", entries);
request.getRequestDispatcher("/pages/result.jsp").forward(request, response);

页:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
${rows}
<c:forEach items="${rows}" var="row">
   <tr>
      <c:forEach items="${row}" var="field">
         <td>${field}</td>
      </c:forEach>
   </tr>
</c:forEach>

参数无法识别 - 意味着它们被打印为${rows}${field}

有趣的是,当我用这种方式做同样的事情时(我理解这是不好的做法):

<% 
List<String[]> entries = (List<String[]>) request.getAttribute("rows"); 
for...
%>

我错过了什么?

4

1 回答 1

1

意味着它们被打印为 ${rows} 和 ${field}

那么,不评估 EL 表达式?当使用的 JSTL 版本、使用的 servletcontainer 版本和 webapp 的版本之间存在版本不兼容时,就会发生这种情况web.xml

首先,您需要确定目标 servlet 容器最大支持哪个 Servlet API 版本。然后您可以确定您实际需要的 JSTL 版本以及web.xml应该声明的版本。

想象一下,您正在使用 Tomcat 7,它是一个与 Servlet 3.0 兼容的容器,那么您应该至少使用 JSTL 1.2,并且web.xml应该声明它符合 Servlet 3.0。或者,如果您使用的是 Tomcat 6,它是一个与 Servlet 2.5 兼容的容器,那么您应该至少使用 JSTL 1.1,并且web.xml应该声明它符合 Servlet 2.5。

一个更罕见的原因,但在初学者中并不少见,是 webapp/WEB-INF/lib错误地被 servletcontainer 特定的 JAR 文件等混杂在一起el-api.jar,这只会与目标 servletcontainer 本身提供的 EL 安装冲突。

也可以看看:

于 2012-12-07T16:02:26.183 回答