JSTL c:forEach 看不到 scriptlet 中声明的变量
JSTL c:forEach does not see variable declared in scriptlet
所以我有一个简单的 JSP 页面来显示如下信息:
<%@ page import="db.DataManager"%>
<%@ page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<%
DataManager dm = (DataManager) application.getAttribute("datamanager");
ArrayList<DataManager.Author> authors = dm.getAuthors();
%>
<body>
<table>
<tr>
<th></th>
<th>Name</th>
<th>Born</th>
<th>Died</th>
</tr>
<c:forEach var="author" items="${authors}">
<p>hello</p>/* not showing */
<tr>
<td>${authors.id}</td>
<td><a href="author.jsp">${author.name}</a></td>
<td>${author.born}</td>
<td>${author.died}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
但是不知何故,无论我在 <c:forEach>
标签中放入什么,它都不会显示在实际页面上(包括测试
标签)。我在WEB-INF/lib目录下有jstl 1.2的jar文件,不知道是怎么回事
首先
先检查这个答案!
How to avoid Java code in JSP files?
你得到的是数据,但不是设置属性,因此<for:each>
不能迭代任何东西。
<%
DataManager dm = (DataManager) application.getAttribute("datamanager"); // get datamanager
ArrayList<DataManager.Author> authors = dm.getAuthors(); // get authors
// missing put authors in session!!!
%>
添加
request.setAttribute("authors", authors);
并且会如您所愿地工作。
在您的 java 代码中添加以下代码。
request.setAttribute("authors", authors);
所以我有一个简单的 JSP 页面来显示如下信息:
<%@ page import="db.DataManager"%>
<%@ page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<%
DataManager dm = (DataManager) application.getAttribute("datamanager");
ArrayList<DataManager.Author> authors = dm.getAuthors();
%>
<body>
<table>
<tr>
<th></th>
<th>Name</th>
<th>Born</th>
<th>Died</th>
</tr>
<c:forEach var="author" items="${authors}">
<p>hello</p>/* not showing */
<tr>
<td>${authors.id}</td>
<td><a href="author.jsp">${author.name}</a></td>
<td>${author.born}</td>
<td>${author.died}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
但是不知何故,无论我在 <c:forEach>
标签中放入什么,它都不会显示在实际页面上(包括测试
标签)。我在WEB-INF/lib目录下有jstl 1.2的jar文件,不知道是怎么回事
首先 先检查这个答案!
How to avoid Java code in JSP files?
你得到的是数据,但不是设置属性,因此<for:each>
不能迭代任何东西。
<%
DataManager dm = (DataManager) application.getAttribute("datamanager"); // get datamanager
ArrayList<DataManager.Author> authors = dm.getAuthors(); // get authors
// missing put authors in session!!!
%>
添加
request.setAttribute("authors", authors);
并且会如您所愿地工作。
在您的 java 代码中添加以下代码。
request.setAttribute("authors", authors);