在JSP中迭代List对象

时间:2013-12-26 18:11:32

标签: java sql spring jsp jstl

我正在研究一个项目,试图教自己弹簧和支柱。我目前停留在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

任何帮助都将受到高度赞赏!

5 个答案:

答案 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>
...
<%}%>