我正在研究一个项目,试图教自己弹簧和支柱.我目前停留在JSP页面上.我有一个带变量eid的pojo类和带有getter / setter的ename,我在sql中有一个表,它有六个填充行的相同值.我通过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]
我想也许我在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>
任何帮助将非常感谢!
解决方法:
在自学Spring和Struts之前,你应该学习Java.输出像这样
org.classes.database.Employee@d9b02
是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>
没有名称为eList的页面,请求,会话或应用程序作用域属性的事实.
你需要添加它
<% List eList = (List)session.getAttribute("empList");
request.setAttribute("eList", eList);
%>
或者在forEach中使用empList属性.
<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>