无法将ArrayList对象从Servlet传递到JSP

时间:2019-03-23 14:12:50

标签: java jsp servlets jstl

我有我的Servlet

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
    List<String> topics = new ArrayList<>();
    ServletConfig config = getServletConfig();

    topics.add(config.getInitParameter("first"));
    System.out.println(config.getInitParameter("first")); //prints proper value, not null;

    topics.add(config.getInitParameter("second"));
    System.out.println(config.getInitParameter("second")); //prints proper value, not null;

    topics.add(config.getInitParameter("third"));
    System.out.println(config.getInitParameter("third")); //prints proper value, not null;

    req.setAttribute("params", topics); //doesn't show up
    req.setAttribute("name", config.getInitParameter("name")); //works good
    req.getRequestDispatcher("index.jsp").forward(req, resp);
}

index.jsp

...
<ol>
    <c:forEach var="param" items="${params}">
        <li>${param}</li>
    </c:forEach>
</ol>
...

Servlet配置没问题,初始化没问题,映射和命名也没问题,这就是为什么当我访问各自的URL时,我确实在输出控制台流中打印了参数,并且它们在那里。但是,出于某些奇怪的原因,JSP显示:

 1. {}
 2. {}
 3. {}

我不想使用Scriptlet Java代码,而是尝试使用JSTL。我看到很多项目都以这种方式工作..这是怎么了?只是厌倦了弄清楚。

2 个答案:

答案 0 :(得分:1)

我花了这半天的时间,最后,确实让我感到疲倦和焦虑,因为它看起来是如此简单明了-应该怎么做? 我认为,由于某些人可能正在寻找相同类型问题的解决方案,因此最好在这里回答-问题是什么。

关键是迭代变量的名称-标识符param

在[可能]所有 .jsp 文件的开头,我们都有用于导入core标签的语句,并为其指定了前缀

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>



原因,为什么

...
<ol>
    <c:forEach var="param" items="${params}">
        <li>${param}</li>
    </c:forEach>
</ol>
...

无法正常工作并且正在显示

 1. {}
 2. {}
 3. {}

是,param是标识jstl/core中核心标签之一的关键字。

<c:param>获取/获取请求参数数组。
因此,每次循环forEach时,都会将param变量分配给查询字符串中的请求参数,而不是${params}变量/占位符中的迭代值,并且我什么也没传递-空数组出现了。

P。 S.注意不要在代码中使用JSTL标记作为变量/标识符。

希望有些人会发现此信息有用。

答案 1 :(得分:0)

我想你有:

<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>

在index.jsp中?