在 JSP 中循环访问列表对象

2022-09-02 23:51:01

我正在做一个项目,试图自学弹簧和支柱。我目前被困在JSP页面上。我有一个带有变量eid的pojo类和带有getters/setters的ename,我还在sql中有一个具有相同值的表,其中包含六个填充的行。
我正在通过 a 访问我的数据库,并将结果存储在列表中,然后我将此列表传递到我的操作页面,在其中我将其设置为 .在我的jsp页面中,我调用该属性,然后尝试使用.
但是没有任何显示,我知道我的列表变量中有数据,因为我使用表达式标签检查了它,对象显示如下:JdbcTemplaterequest.setAttribute("empList",eList)JSTL<%=eList%>

[org.classes.database.Employee@d9b02, 
org.classes.database.Employee@13bce7e, 
org.classes.database.Employee@171cc79, 
org.classes.database.Employee@272a02, 
org.classes.database.Employee@137105d, 
org.classes.database.Employee@1359ad]

我想也许我在jstl上丢失了一些东西,但我的文件夹中有jstl-1.2。我还尝试将其添加到配置路径文件中,但仍然一无所获。我也有正确的标签网址。
也当我做一个简单的.你好,打印出来。因此,这使我相信我的工作正常,但是当我尝试使用任何信息来迭代我的列表时,根本没有显示任何内容。

无论如何,这是我的JSP页面:META-INF/lib<c:out value="Hello"/>jstljstl

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-   8859-1"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.List"%>
<!DOCTYPE html>
<% List eList = (List)session.getAttribute("empList");%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Employee Details</title>
</head>
<body>
<c:out value="Hello"></c:out>
<h3>Employee Details</h3>
<hr size="4" color="gray"/>
<table>
<%=eList%>
    <c:forEach items="${eList}" var="employee">
        <tr>
            <td>Employee ID: <c:out value="${employee.eid}"/></td>
            <td>Employee Pass: <c:out value="${employee.ename}"/></td>  
        </tr>
    </c:forEach>
</table>
</body>
</html>

任何帮助将不胜感激!


答案 1

在自学Spring和Struts之前,你应该更深入地了解Java语言。像这样输出

org.classes.database.Employee@d9b02

是所有对象从该类继承的方法的结果,该类是Java中所有类的超类。Object#toString()Object

子类通过循环访问所有元素并调用这些元素来实现这一点。但是,您似乎尚未在类中实现(重写)该方法。ListtoString()Employee

您的 JSTL 在这里

<c:forEach items="${eList}" var="employee">
    <tr>
        <td>Employee ID: <c:out value="${employee.eid}"/></td>
        <td>Employee Pass: <c:out value="${employee.ename}"/></td>  
    </tr>
</c:forEach>

很好,除了您没有名为 的页面、请求、会话或应用程序范围属性。eList

您需要添加它

<% List eList = (List)session.getAttribute("empList");
   request.setAttribute("eList", eList);
%>

或者使用 中的属性。empListforEach

<c:forEach items="${empList}" var="employee">
    <tr>
        <td>Employee ID: <c:out value="${employee.eid}"/></td>
        <td>Employee Pass: <c:out value="${employee.ename}"/></td>  
    </tr>
</c:forEach>

答案 2

将代码更改为以下内容

<%! List eList = (ArrayList)session.getAttribute("empList");%>
....
<table>
    <%
    for(int i=0; i<eList.length;i++){%>
        <tr>
            <td><%= ((Employee)eList[i]).getEid() %></td>
            <td><%= ((Employee)eList[i]).getEname() %></td>  
        </tr>
      <%}%>
</table>