在JSP中迭代List对象

jjc*_*ode 13 java sql spring jsp jstl

我正在研究一个项目,试图教自己弹簧和支柱.我目前停留在JSP页面上.我有一个带变量eid的pojo类和带有getter/setter的ename,我在sql中也有一个表,其中包含六个填充行的相同值.
我通过a访问我的数据库JdbcTemplate并将结果存储在列表中,然后我将此列表传递到我的操作页面,我将其设置为request.setAttribute("empList",eList).在我的jsp页面中,我调用该属性,然后尝试使用它迭代它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]
Run Code Online (Sandbox Code Playgroud)

我想也许我在jstl上遗漏了一些东西,但我的META-INF/lib文件夹中有jstl-1.2 .我也尝试在配置路径文件中添加它,但仍然没有.我也有正确的标签网址.
当我做一个简单的时候<c:out value="Hello"/>.你好打印出来.因此,这让我相信我jstl的工作正常,但是当我尝试迭代我的列表时jstl根本没有任何显示.

无论如何这里是我的JSP页面:

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感谢!

Sot*_*lis 27

在自学Spring和Struts之前,你应该学习Java.输出像这样

org.classes.database.Employee@d9b02
Run Code Online (Sandbox Code Playgroud)

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

List子类通过遍历所有元素,并呼吁实现这一toString()那些.但是,您似乎没有在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>
Run Code Online (Sandbox Code Playgroud)

除了您没有名为的页面,请求,会话或应用程序作用域属性之外,这样做很好eList.

你需要添加它

<% List eList = (List)session.getAttribute("empList");
   request.setAttribute("eList", eList);
%>
Run Code Online (Sandbox Code Playgroud)

或使用属性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>
Run Code Online (Sandbox Code Playgroud)


小智 5

将代码更改为以下内容

<%! 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>
Run Code Online (Sandbox Code Playgroud)

  • 请不要建议使用 scriptlet 作为 EL 和 jstl 的替代品。 (7认同)
  • @Alaa Abuzaghleh 阅读为什么不使用 Scriptlets http://www.coderanch.com/how-to/java/WhyNotUseScriptlets (2认同)