【问题标题】:Can't print the Java List object in JSP, with JSTL无法使用 JSTL 在 JSP 中打印 Java List 对象
【发布时间】:2019-08-14 07:47:07
【问题描述】:

我有一个 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


【解决方案1】:

我想你有:

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

在 index.jsp 中?

【讨论】:

  • 是的,当然。顺便说一句,我解决了这个问题.. 这是一个非常棘手和可怕的功能。
  • 您能分享一下解决方案吗?
  • 完成。我希望它会有所帮助。
【解决方案2】:

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

这里的关键点是迭代变量的名称——标识符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。

&lt;c:param&gt; 获取/获取请求参数数组。
因此,每次 forEach 循环迭代时,param 变量被分配给来自查询字符串的请求参数,而不是来自 ${params} 变量/占位符的迭代值,并且因为我什么都不传递 - 空数组正在出现。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 2015-01-10
    • 2016-11-10
    • 2018-12-19
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    相关资源
    最近更新 更多