我正在研究一个项目,试图教自己弹簧和支柱。我目前停留在JSP页面上。我有一个带变量eid的pojo类和带有getter / setter的ename,我在sql中有一个表,其中有六个填充行的相同值。
我通过JdbcTemplate
访问我的数据库并存储了在列表中的结果,然后我将此列表传递到我的操作页面,我在其中将其设置为request.setAttribute("empList",eList)
。在我的jsp页面中,我调用该属性,然后尝试使用JSTL
迭代它。
然而没有任何显示,我知道我的列表变量中包含数据,因为我使用表达式标签{检查了它{1}}和对象显示如下:
<%=eList%>
我想也许我在jstl上遗漏了一些内容,但我的[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-1.2。我也尝试在配置路径文件中添加它,但仍然没有。我也有正确的标签网址。
当我做一个简单的META-INF/lib
时。你好打印出来。所以这让我相信我的<c:out value="Hello"/>
工作正常,但是当我尝试使用jstl
迭代我的列表时,根本没有任何显示。
无论如何这里是我的JSP页:
jstl
任何帮助都将受到高度赞赏!
答案 0 :(得分:25)
在自学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);
%>
或者使用empList
中的forEach
属性。
<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>
答案 1 :(得分:3)
您可以直接在empList
代码中阅读forEach
。试试这个
<table>
<c:forEach items="${sessionScope.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>
</table>
答案 2 :(得分: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>
答案 3 :(得分:0)
<c:forEach items="${sessionScope.empL}" var="emp">
<tr>
<td>Employee ID: <c:out value="${emp.eid}"/></td>
<td>Employee Pass: <c:out value="${emp.ename}"/></td>
</tr>
</c:forEach>
答案 4 :(得分:-2)
另一个只有scriplets的例子,当迭代包含Maps的ArrayList时。
<%
java.util.List<java.util.Map<String,String>> employees=(java.util.List<java.util.Map<String, String>>)request.getAttribute("employees");
for (java.util.Map employee: employees) {
%>
<tr>
<td><input value="<%=employee.get("fullName") %>"/></td>
</tr>
...
<%}%>