JSTL et Hibernate

JSTL et Hibernate - Java - Programmation

Marsh Posté le 02-08-2006 à 09:13:46    

Bonjour à tous,
 
Je développe actuellement une petite appli J2EE. Mais je rencontre actuellement un petit probléme.
En fait j'utilise Hibernate pour utiliser ls persistance objet et parceque je trouve ce framework trés bien fait et que je ne l'avais utilisé (et comme je fais ce que je veux au boulot.......lol).
Bref, j'ai ma Servlet qui récupére une list d'aprés une requéte émise via la session.find("xxxxx" ).list();
Cette liste contient en fait des tableaux d'objets dont je peux récupérer les valeurs en récupérant par exemple un iterateur sur cette liste.
 
Moi, ce que j'aimerai en fait, c'est balancer cette liste à ma JSP qui utilise JSTL.
Pour afficher ma liste, le tag foreach fonctionne correctement. Par contre lorsque je veux récupérer une valeur pour chaque ligne, à chaque fois, ça me balance une erreur :
javax.servlet.jsp.el.ELException: The "." operator was supplied with an index value of type "java.lang.String" to be applied to a List or array, but that value cannot be converted to an integer.
Voici ma boucle :  

Code :
  1. <c:forEach var="astr" items="${requestScope['astrs']}" varStatus="status">
  2.         <tr class="${status.index%2==0?'':'couleur'}">
  3.           <td class="CadreG"></td>
  4.           <td>${astr.nomRessource}</td>
  5.           <td>${astr.prenomRessource}</td>
  6.           <td>${astr.telSncfRessource}</td>
  7.           <td>${astr.nomSociete}</td>
  8.           <td>
  9.             <a class="modifier" href="?do=SaisirPrestataire&mode=M&id_ress=${astr.idRessource}" title="Modifier les données du prestataire" ></a>
  10.             <a class="supprimer" href="?do=SupprimerPrestataire&id_ress=${astr.idRessource}" title="Supprimer le prestataire" ></a>
  11.           </td>
  12.           <td class="CadreD"></td>
  13.         </tr>
  14.       </c:forEach>


 
Je n'arrive pas à récupérer les propriétés comme j'ai envie. De la je me suis dit : "Hibernate ne me renvoie pas une liste de bean, mais bel et bien une liste de tableau d'objets."
Comment je peux faire pour afficher proprement le contenu de cette liste tout droit venue des profondeurs d'Hibernate ?
Quelle est la, votre, meilleure solution ??
Merci d'avance de vos réponses.

Reply

Marsh Posté le 02-08-2006 à 09:13:46   

Reply

Marsh Posté le 02-08-2006 à 09:15:47    

Utiliser astr[0], astr[1]... ça fonctionne correctement, mais c'est beaucoup moins évident pour comprendre d'ou ça vient...
Enfin je suppose que c'est la seule solution....

Reply

Marsh Posté le 02-08-2006 à 13:24:19    

il faut utiliser l'attribut "var" de c:forEach

Code :
  1. <c:forEach var="astr" items="${requestScope.astrs}" varStatus="status" var="toto">
  2.         <tr class="${status.index%2==0?'':'couleur'}">
  3.           <td class="CadreG"></td>
  4.           <td>${toto.nomRessource}</td>
  5.           <td>${toto.prenomRessource}</td>
  6.           <td>${toto.telSncfRessource}</td>
  7.           <td>${toto.nomSociete}</td>
  8.           <td>
  9.             <a class="modifier" href="?do=SaisirPrestataire&mode=M&id_ress=${toto.idRessource}" title="Modifier les données du prestataire" ></a>
  10.             <a class="supprimer" href="?do=SupprimerPrestataire&id_ress=${toto.idRessource}" title="Supprimer le prestataire" ></a>
  11.           </td>
  12.           <td class="CadreD"></td>
  13.         </tr>
  14.       </c:forEach>

Message cité 1 fois
Message édité par _guigui_ le 02-08-2006 à 13:25:02
Reply

Marsh Posté le 02-08-2006 à 13:56:25    

_guigui_ a écrit :

il faut utiliser l'attribut "var" de c:forEach

Code :
  1. <c:forEach var="astr" items="${requestScope.astrs}" varStatus="status" var="toto">
  2.         <tr class="${status.index%2==0?'':'couleur'}">
  3.           <td class="CadreG"></td>
  4.           <td>${toto.nomRessource}</td>
  5.           <td>${toto.prenomRessource}</td>
  6.           <td>${toto.telSncfRessource}</td>
  7.           <td>${toto.nomSociete}</td>
  8.           <td>
  9.             <a class="modifier" href="?do=SaisirPrestataire&mode=M&id_ress=${toto.idRessource}" title="Modifier les données du prestataire" ></a>
  10.             <a class="supprimer" href="?do=SupprimerPrestataire&id_ress=${toto.idRessource}" title="Supprimer le prestataire" ></a>
  11.           </td>
  12.           <td class="CadreD"></td>
  13.         </tr>
  14.       </c:forEach>



 
Je ne comprend pas trop ta réponse. 2 var dans un forEach ? Il doit y avoir un probléme là ? Bref, je vais utiliser l'index du tableau, ça marche comme ça.

Reply

Marsh Posté le 02-08-2006 à 14:00:10    

Bon, je sais, je suis chiant.
Mais j'ai encore un probléme avec Hibernate...
 
J'ai un objet persistant appelé Cheminot qui contient toute sorte d'attribut et un  
private Set qualifCheminots
 
Dans mon controleur, je récupére un cheminot via son id. Ensuite je voudrai récupérer qualifCheminots en faisant :

Code :
  1. Cheminot ch = (Cheminot)session.load(Cheminot.class, id);
  2. Set equipes = ch.getEquipeCheminots();


Mais y'a jamais moyen que ça fonctionne, j'ai toujours cette erreur :

Code :
  1. org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: org.model.Cheminot.equipeCheminots - no session or session was closed


J'ai fais quelques recherches sur le net mais je n'ai rien trouvé qui puisse résoudre mon probléme.
Si quelqu'un a déjà eu ce probléme et qu'il connaît la solution...
Merci

Reply

Marsh Posté le 02-08-2006 à 15:17:19    

Encore une question, les données de type date qui sont extraites de la BDD s'affiche de cette façon : yyyy-MM-dd et je voudrai que ces données s'affiche de cette façon : dd/MM/yyyy . Est-il possible de mettre une sorte d'intercepteur qui, avant d'afficher la donnée dans la JSP (je précise que j'utilise JSTL), intercepte la date, la formate à ma façon, puis l'affiche...
 
De la même façon, pour passer d'une date entrée dans un formulaire du type dd/MM/yyyy vers une date dans la BDD de type yyyy-MM-dd.
 
Avez vous des idées spécifiques à mettre en place ?

Reply

Marsh Posté le 02-08-2006 à 15:44:10    

aucune idée ?

Reply

Marsh Posté le 02-08-2006 à 15:50:41    

ton champ devrait être une java.util.Date, et après, tu joues avec.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 02-08-2006 à 15:54:00    

Mon champ, c'est bien une java.util.Date. Mais le formatage de la date doit se faire au niveau présentation ou dans le controleur ou durant l'accés à la BDD en formattant la date ?
Je souhaitais faire cela :  
<fmt:parseDate var="debut" value="${equipe.dateDebutEquipe}" type="date" dateStyle="short" />
mais ça fonctionne jamais, j'ai toujours cette erreur :  
D'après la TLD, l'attribut value n'accepte aucune expression
 
Je ne sais vraiment pas comment faire autrement...

Reply

Marsh Posté le 02-08-2006 à 16:06:39    

Je me suis trompé de ligne ;-)
En fait c'est  

Code :
  1. <fmt:formatDate pattern="dd/MM/yyyy" value="${equipe.dateFinEquipe}" />


Qui ne fonctionne pas...
D'après la TLD, l'attribut value n'accepte aucune expression

Reply

Marsh Posté le 02-08-2006 à 16:06:39   

Reply

Marsh Posté le 02-08-2006 à 16:22:55    

<bean:write name="machin" property="taDate" format="yyyyaaMM">
 
sinon, fmt, ça sort d'où ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 02-08-2006 à 16:44:36    

De JSTL
En fait, mon probléme venait de la déclaration de ma taglib :
plutôt que décrire :
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
j'avais écris :
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>

Reply

Marsh Posté le 03-08-2006 à 13:34:56    

brasseld a écrit :

Je ne comprend pas trop ta réponse. 2 var dans un forEach ? Il doit y avoir un probléme là ? Bref, je vais utiliser l'index du tableau, ça marche comme ça.


ha je n'avais pas vu que tu avais déjà mis l'attribut var désolé... mais du coup je ne comprends pas ton erreur, ca devrait fonctionner si les attributs sont bien du bon type...
désolé  :jap:  

Reply

Marsh Posté le 03-08-2006 à 16:23:47    

La réponse est juste au dessus ;-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed