无法将servms从servlet传递给jsp(jstl)

时间:2012-12-07 15:56:16

标签: jsp jstl el

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

我的servlet:

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...
%>

我错过了什么?

1 个答案:

答案 0 :(得分:1)

  

表示它们打印为$ {rows}和$ {field}

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

首先,您需要确定目标servletcontainer最大支持哪个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等等,这只会与EL安装发生冲突由目标servletcontainer本身提供。

另见: