JSTL c:forEach没有看到在scriptlet中声明的变量

时间:2016-08-25 06:49:06

标签: jsp jstl el

所以我有一个简单的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文件,所以我不知道发生了什么。

2 个答案:

答案 0 :(得分:1)

第一个 先检查这个答案!

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

并且会按预期工作。

答案 1 :(得分:1)

在您的java代码中添加以下代码。

this