Итерация через объект списка в JSP
Я работаю над проектом, чтобы попробовать научить себя spring и struts. В настоящее время я застрял на странице JSP. У меня есть класс pojo с переменными eid и ename с getters/seters, у меня также есть таблица в sql с теми же значениями с шестью заполненными строками.
Я обращаюсь к своей базе данных через JdbcTemplate
и сохранил результат в список, я передал этот список на мою страницу действий, в которой я установил ее как request.setAttribute("empList",eList)
. На моей странице jsp я вызываю этот атрибут, а затем пытаюсь выполнить итерацию через него с помощью JSTL
.
Однако ничего не появляется, я знаю, что моя переменная списка имеет данные в нем, так как я проверил его с помощью тега выражения <%=eList%>
и объекты отображаются следующим образом:
[[email protected],
[email protected],
[email protected],
[email protected],
[email protected],
[email protected]]
Я подумал, что, возможно, мне что-то не хватает на jstl, но у меня есть jstl-1.2 в моей папке META-INF/lib
. Я также попытался добавить его в файл конфигурации configure и все равно ничего. У меня также есть правильный URL-адрес тега.
Также, когда я делаю простой <c:out value="Hello"/>
. Привет распечатывается. Таким образом, это заставляет меня поверить, что мой JSTL
работает нормально, но когда я пытаюсь выполнить итерацию через свой список, используя JSTL
, ничего не появляется вообще.
Anyways вот моя страница 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>
Любая помощь будет высоко оценена!
Ответы
Ответ 1
Прежде чем научить себя Spring и Struts, вы должны, вероятно, изучить Java. Вывод вроде этого
[email protected]
является результатом метода 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>
Ответ 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
вы можете прочитать 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>
Ответ 4
другой пример с помощью только скриптов при повторении через 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>
...
<%}%>
Ответ 5
<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>