Je travaille sur un projet pour essayer de m'apprendre le printemps et les jambes de force. Je suis actuellement bloqué sur une page JSP. J'ai une classe pojo avec des variables eid et ename avec des getters/setters, j'ai aussi une table en sql avec les mêmes valeurs avec six lignes remplies.
J'accède à ma base de données par le biais d'une JdbcTemplate
et ai stocké le résultat dans une liste. J'ai ensuite transmis cette liste à ma page d'action dans laquelle je l'ai configurée en tant que request.setAttribute("empList",eList)
. Dans ma page jsp, j’appelle cet attribut et essaie ensuite de le parcourir en utilisant JSTL
.
Cependant, rien ne s'affiche, je sais que ma variable de liste contient des données puisque je l'ai vérifiée à l'aide de la balise d'expression <%=eList%>
et que les objets s'affichent comme suit:
[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]
Je pensais qu'il me manquait peut-être quelque chose sur jstl, mais jstl-1.2 se trouve dans mon dossier META-INF/lib
. J'ai également essayé de l'ajouter dans le fichier de chemin de configuration et toujours rien. J'ai aussi l'URL du tag correct.
Aussi, quand je fais un simple <c:out value="Hello"/>
. Bonjour fait imprimer. Cela me porte donc à croire que ma jstl
fonctionne correctement, mais lorsque j'essaie de parcourir ma liste à l'aide de jstl
, rien ne s'affiche.
En tout cas voici ma page 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>
Toute aide serait très appréciée!
Avant de vous apprendre Spring et Struts, vous devriez probablement apprendre Java. Sortie comme ça
org.classes.database.Employee@d9b02
est le résultat de la méthode Object#toString()
dont tous les objets héritent de la classe Object
, la superclasse de toutes les classes en Java.
Les sous-classes List
implémentent ceci en itérant sur tous les éléments et en appelant toString()
sur ceux-ci. Cependant, il semble que vous n'ayez pas implémenté (annulée) la méthode dans votre classe Employee
.
Votre JSTL ici
<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>
c'est bien, sauf que vous n'avez pas d'attribut de portée de page, de demande, de session ou d'application nommé eList
.
Vous devez l'ajouter
<% List eList = (List)session.getAttribute("empList");
request.setAttribute("eList", eList);
%>
Ou utilisez l'attribut empList
dans la 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>
vous pouvez lire empList
directement dans la balise forEach
.Essayez ceci
<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>
changer le code comme suit
<%! 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>
<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>