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);