无法将参数从servlet传递到jsp(jstl)



我正试图将一个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...
%>

我错过了什么?

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

那么,EL表达式不求值?当使用的JSTL版本、使用的servlet容器版本和Web应用程序的web.xml版本之间存在版本不兼容时,就会发生这种情况。

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

假设您使用的是Tomcat7,这是一个与Servlet 3.0兼容的容器,那么您至少应该使用JSTL 1.2,并且web.xml应该声明为符合Servlet 3.0。或者,如果您使用的是Tomcat6,它是一个与Servlet 2.5兼容的容器,那么您至少应该使用JSTL 1.1,并且web.xml应该声明为符合Servlet 2.5。

一个更罕见但在初学者中并不罕见的原因是,webapp的/WEB-INF/lib错误地被特定于servlet容器的JAR文件(如el-api.jar等)弄得一团糟,这只会与目标servlet容器本身提供的EL安装相冲突。

另请参阅:

  • 我们的JSTL wiki页面-包含版本/安装详细信息、下载链接和web.xml示例

最新更新