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

问题描述 投票:0回答:2

我有我的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。我见过很多以这种方式工作的项目..这里有什么问题?只是厌倦了搞清楚。

java jsp servlets jstl
2个回答
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>获取/获取Request Parameter(s)数组。 因此,每次forEach循环迭代时,param变量被分配给查询字符串请求参数而不是来自${params}变量/占位符的迭代值,因为我没有传递任何东西 - 空数组出现了。

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

希望你们中的一些人会发现这些信息很有用。


0
投票

我猜你有:

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

在index.jsp中?

© www.soinside.com 2019 - 2024. All rights reserved.