IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 2 Java Discussion :

Probleme JSTL <c:foreach >


Sujet :

Struts 2 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de petitpasdelune
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 221
    Par défaut Probleme JSTL <c:foreach >
    Bonjour.
    Contexte : ExtremeComponents + Struts2 (Tiles2) + Spring2 + Hibernate3 / Tomcat 6.0.10 / WinXP
    Problème : je n'arrive pas à itérer sur les propriétés d'objet qui sont des Collections.
    Détails : dans <ec:table>, les propriétés items et var fonctionnent comme pour le tag <c:forEach>. L'itération fonctionne bien car toutes les lignes du tableau sont crées.
    On peut accéder correctement à l'arborescence des objets comme le montre ceci : ${usr.contact.contactNameFirst}, qui fonctionne parfaitement.
    Par contre, si je veux itérer sur les propriétés ${usr.projects} ou ${usr.projects} qui sont des Collections (cf <c:forEach> dans le code) j'ai l'erreur suivante :
    GRAVE: "Servlet.service()" pour la servlet jsp a lancé une exception
    javax.servlet.jsp.JspException: TableTag Problem: javax.el.PropertyNotFoundException: Property '0' not found on type org.hibernate.collection.PersistentSet
    at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:193)
    at javax.el.BeanELResolver.property(BeanELResolver.java:267)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:60)
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:97)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:928)
    ...
    at org.extremecomponents.table.tag.TableTag.doCatch(TableTag.java:488)
    at org.apache.jsp.WEB_002dINF.string.users_jsp._jspx_meth_ec_005ftable_005f0(users_jsp.java:148)
    at org.apache.jsp.WEB_002dINF.string.users_jsp._jspService(users_jsp.java:77)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    ...
    Si l'on supprime le <c:forEach>, l'affichage de la propriété ${usr.projects} donne bien un vecteur :
    [com.iscd.bi.hibernate3.Project@408893, com.iscd.bi.hibernate3.Project@16999c8, com.iscd.bi.hibernate3.Project@1ef3d12, com.iscd.bi.hibernate3.Project@1a80e5a, com.iscd.bi.hibernate3.Project@1264c84, com.iscd.bi.hibernate3.Project@1927504, com.iscd.bi.hibernate3.Project@54cbb9]
    Voici le code ma JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <%@ taglib prefix="s" uri="/struts-tags" 
    %><%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"
    %><%@ taglib uri="http://acegisecurity.org/authz" prefix="authz" 
    %><%@ taglib prefix="ec" uri="http://www.extremecomponents.org"
    %><%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" 
    %><div class="main" >
    <br/>
    <ec:table items="users" var="usr" action="users.action" title="Users" imagePath="/bi/img/table/*.gif">
    	<ec:exportPdf fileName="projects.pdf"/>
    	<ec:exportXls fileName="projects.xls"/>
    	<ec:row highlightRow="true">
    		<ec:column property="userId" title="User">
    			<s:a href="">${usr.userId}</s:a>
    		</ec:column>
    		<ec:column property="contactName" title="Contact">
    			<s:a href="">${usr.contact.contactNameFirst} ${usr.contact.contactNameLast} (${usr.contact.contactCompanyId})</s:a>
    		</ec:column>
    		<ec:column property="roles" title="Roles">
    			<s:a href="">${usr.roles}</s:a>
    		</ec:column>
    		<ec:column property="projects" title="Projects">
    			<s:a href="">${ usr.projects}</s:a>
    		</ec:column>
    		<ec:column property="projectsName" title="Projects">
    			<c:forEach items="${usr.projects}" var="prj">${prj.projectNameShort}</c:forEach>
    		</ec:column>
    	</ec:row>
    </ec:table>
    <s:debug></s:debug>
    </div>
    Pouvez-vous m'aider SVP ?

    Merci

    PPDL.

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Je ne connais pas Struts 2 mais après une petite recherche, j'ai vu qu'il existait un équivalent au tag c:forEach, soit s:iterator.
    Tu aurais peut-être intérêt à l'utiliser.

    Sinon, la plupart du temps, les problèmes d'utilisation de la JSTL sont liés à un problème de version.
    Donc, es-tu certain d'avoir les bonnes versions des jars pour une utilisation en Struts 2?

  3. #3
    Membre expérimenté Avatar de petitpasdelune
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 221
    Par défaut
    J'ai déjà essayer avec <s:iterator>, mais là je n'ai simplement rien

    En fait quand j'utilise ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <s:iterator value="${usr.projects}"><s:property default="JeSuisUnCon" value="projectNameShort"/></s:iterator>
    Je n'ai rien, même pas une seule fois ""JeSuisUnCon" !!!
    => ${usr.projects} n'est même pas consommé car il peut être affiché par la suite
    => Le tag <s:iterator> ne voit pas non plus l'objet ${usr.projects} comme une liste ou un vecteur.

    Or l'affichage de l'EL {users[0].projects} directement dans la page (hors tags) donne bien ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [com.iscd.bi.hibernate3.Project@1717334, com.iscd.bi.hibernate3.Project@1dfb148, com.iscd.bi.hibernate3.Project@1181c24, com.iscd.bi.hibernate3.Project@1712492, com.iscd.bi.hibernate3.Project@f02a6d, com.iscd.bi.hibernate3.Project@18aecf1, com.iscd.bi.hibernate3.Project@1428ffa, com.iscd.bi.hibernate3.Project@fa8ba9]
    tandis que l'affichage de l'EL ${users[0].projects[0]} plante avec la même erreur.

    Je suppose que l'erreur peut provenir d'une histoire de conteneur soit du DAO, du POJO Hibernate, du POJO action. Mais je ne trouve pas

    Qu'en penses-tu ?

    PPDL.

  4. #4
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    As-tu essayé de coder ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <s:property value="${usr.projects}"/>
    juste pour voir s'il t'affiche la même chose qu'avec :

  5. #5
    Membre expérimenté Avatar de petitpasdelune
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 221
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <s:property value="${usr.projects}"/>
    Nada....

    PPDL

  6. #6
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Je n'y connais vraiment rien en ExtremeComponents et Struts 2 mais tu es certain qu'il faut mettre la propriété usr.projects dans un ${} dans un s:iterator ?
    parce qu'en surfant un peu, j'ai vu des écritures avec %{} ou #.
    ça te dit quelque chose ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CakePHP] Probleme récupération données avec foreach
    Par kiradeus dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 25/04/2012, 10h39
  2. Réponses: 18
    Dernier message: 25/07/2007, 12h34
  3. [MySQL] probleme avec foreach
    Par hellosct1 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 20/07/2007, 14h07
  4. [Tableaux] Probleme de Foreach imbriqué
    Par ainotenshi dans le forum Langage
    Réponses: 5
    Dernier message: 05/06/2007, 11h50
  5. Réponses: 1
    Dernier message: 11/12/2006, 19h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo