【问题标题】:Unable to get jstl requestScope variables set by servlet无法获取 servlet 设置的 jstl requestScope 变量
【发布时间】:2014-07-08 11:11:00
【问题描述】:

我是第一次学习JSTL,我在 Eclipse IDE 中使用 jstl-1.2.jar、Tomcat 7 和最新版本的 Java。

我试图简单地为列表中的每个项目打印出表格的行。列表中的对象在 servlet 中设置了它们的公共属性,它将列表转发到我尝试打印的 index.jsp 页面。

这是我的 servlet:

import jstl.Employee;

@WebServlet("/HomeServlet")
public class HomeServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Employee> empList = new ArrayList<Employee>();
        Employee emp1 = new Employee();
        emp1.setId(1); emp1.setName("John");emp1.setRole("Developer");
        Employee emp2 = new Employee();
        emp2.setId(2); emp2.setName("Jane");emp2.setRole("Manager");
        empList.add(emp1);empList.add(emp2);

        request.setAttribute("empList", empList);
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.jsp");
        rd.forward(request, response);
    }
}

还有 index.jsp 页面,我尝试在其中循环列表并打印出可公开访问的属性的对象变量:

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Home Page</title>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<style>
table,th,td
{border:1px solid black;}
</style>
</head>
<body>
    <%-- Using JSTL forEach and out to loop a list and display items in table --%>
    <table>
        <tbody>
        <tr><th>ID</th><th>Name</th><th>Role</th></tr>
        <c:forEach items="${requestScope.empList}" var="emp">
            <tr><td><c:out value="${emp.id}"></c:out></td>
            <td><c:out value="${emp.name}"></c:out></td>
            <td><c:out value="${emp.role}"></c:out></td></tr>
        </c:forEach>
        </tbody>
    </table>
<br><br>
</body>
</html>

目前,当我加载页面时,只显示表格标题而不显示两行,这是为什么?

编辑: 添加了员工类:

package jstl;


public class Employee {

    private int id;
    private String name;
    private String role;
    public Employee() {
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getRole() {
        return role;
    }
    public void setRole(String role) {
        this.role = role;
    }

}

编辑:这些是我正在使用的 jstl.jars:

【问题讨论】:

    标签: java jsp tomcat servlets jstl


    【解决方案1】:

    试试&lt;c:forEach items="${empList}" var="emp"&gt;

    另外,您需要通过 servlet 访问您的页面。在您的情况下,这将是/HomeServlet。如果您通过/index.jsp 访问您的页面,则不会创建该列表,因此您的JSP 文件无法找到该列表。

    【讨论】:

    • 您是通过 servlet 访问页面,而不是在地址栏中输入“localhost/index.jsp”,对吧?
    • 不,我只访问 index.jsp 页面http://localhost:8080/jstl/index.jsp
    • 你应该通过servlet访问你的页面,否则列表将不会被设置为请求。您必须通过将其添加到 web.xml 中来配置 servlet。
    • 所以 servlet 成为我的新索引页面或 web.xml 中的欢迎文件?
    • 你的应用的WEB-INF目录下应该有一个web.xml文件。如果你刚刚在你的 tomcat/webapps 目录下创建了“jstl”目录,你可能想读入this
    【解决方案2】:

    代替

    <c:forEach items="${requestScope.empList}" var="emp">
    

    应该是

    <c:forEach items="${empList}" var="emp">
    

    【讨论】:

    • 我修改为&lt;c:forEach items="empList" var="emp"&gt;..你试过了吗?
    • 是的,它给出了这个错误:javax.el.PropertyNotFoundException: Property 'id' not found on type java.lang.String
    • 所以它给&lt;c:out value="${emp.id}"&gt;..id 错误是整数吗?
    • 是的 id 是一个整数。我在我的问题中添加了 Employee 类。它也给出了字符串的错误..
    • 尝试使用 -
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多