无法使用 JSTL 在 JSP 中打印 Java List 对象
Can't print the Java List object in JSP, with 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. {}
N.B。我不想使用 Scriptlet Java 代码,我正在尝试使用 JSTL。我见过很多以这种方式工作的项目..这里有什么问题?只是厌倦了弄清楚。
我想你有:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
在index.jsp?
我花了半天的时间,到最后,真的让我感到疲倦和焦虑,因为看起来很明显和简单的代码 - 应该哪里出错了?
由于有些人可能正在寻找同类问题的解决方案,我认为,最好在这里回答这个问题 - 问题是什么。
这里的关键点是迭代变量的名称——标识符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>
fetches/gets 请求参数数组。
因此,每次 forEach
循环迭代时,param
变量被分配给来自查询字符串的请求参数,而不是来自 ${params}
variable/placeholder 的迭代值,当我什么都没传递时 - 空数组出现了。
P. S. 注意不要在代码中使用 JSTL 标签作为 variables/identifiers。
希望你们中的一些人会发现这些信息有用。
我有一个 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. {}
N.B。我不想使用 Scriptlet Java 代码,我正在尝试使用 JSTL。我见过很多以这种方式工作的项目..这里有什么问题?只是厌倦了弄清楚。
我想你有:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
在index.jsp?
我花了半天的时间,到最后,真的让我感到疲倦和焦虑,因为看起来很明显和简单的代码 - 应该哪里出错了? 由于有些人可能正在寻找同类问题的解决方案,我认为,最好在这里回答这个问题 - 问题是什么。
这里的关键点是迭代变量的名称——标识符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>
fetches/gets 请求参数数组。
因此,每次 forEach
循环迭代时,param
变量被分配给来自查询字符串的请求参数,而不是来自 ${params}
variable/placeholder 的迭代值,当我什么都没传递时 - 空数组出现了。
P. S. 注意不要在代码中使用 JSTL 标签作为 variables/identifiers。
希望你们中的一些人会发现这些信息有用。