Итерация по объекту List в JSP

Я работаю над проектом, чтобы попытаться научить себя Spring и Struts. В настоящее время я застрял на странице JSP. У меня есть класс pojo с переменными eid и 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, но у меня есть jstl-1.2 в моем . Я также попытался добавить его в файл configure path и все равно ничего. У меня также есть правильный url-адрес тега.
также, когда я делаю простой <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>

любая помощь будет высоко ценится!

5 ответов


прежде чем учить себя пружине и стойкам, вы, вероятно, должны изучить Java. Вывод, как это

org.classes.database.Employee@d9b02

результат Object#toString() метод, который все объекты наследуют от Object class, суперкласс всех классов в 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>

измените код на следующий

<%! 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>

вы можете узнать 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>

другой пример с scriplets, выполняя итерации через 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>
...
<%}%>

 <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>