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

  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 ?

  7. #7
    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
    Oui, j'ai essayé avec les autres grammaires,
    mais à priori rien ne passe sur la pile (#) (ou alors la ref est consommée je ne sais où et je ne sais par quel miracle )
    ni dans le contexte (%{}) (ce qui est quand même bizarre).

    Je vais essayer de voir si je peu facilement mettre cette bibliothèque
    aux normes 2.0/2.4 pour voir. Sinon je vais essayer de faire l'équivalent
    pour struts2 avec un filtre, ou un intercepteur ou autre chose. Je ne sais pas.

    <mode dépressif> </mode_dépressif>

    Merci

    PPDL.

  8. #8
    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
    J'ai fait un tour sur le forum d'eXtremeComponents et il y a quelqu'un qui a eu le même problème que toi mais je n'ai pas capté la réponse.

  9. #9
    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
    En fait les tags extremecomponents supportent les EL, donc il n'est pas nécessaire d'utiliser <c:out>, j'ai aussi essayé par acquis de conscience avec le c:out dans le c:forEach et cela n'a rien donné

    Je te tiens au courant de mes avancées.

    PPDL.

  10. #10
    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
    Dis-moi, as-tu vu que eXtremeComponents a une version plus récente et change de nom, soit JMesa ?
    Par contre, il faut avoir au minimum le jdk 1.5.
    Ton problème sera peut-être résolu avec cette version-là.

    En tout cas, je ne connaissais ni l'un ni l'autre mais elle a l'air sympa cette librairie de tags.

    Tiens, je viens de trouver une autre discussion sur le forum eXtremeComponents qui, il me semble, donne une réponse à ton problème ici.

  11. #11
    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
    Oui j'ai vu pour JMesa, mais cette nouvelle mouture n'est pas encore mature à mon gout (en fait comme tout bon programmeur je suis fainéant et il n'y a pas encore de taglib pour JMesa et cette bibliotheque semble assez générique alors qu je cherche quelque chose de simple a utiliser avec peu de programmation)

    Quant à la réponse apportée par ce post , elle ne me convient pas car je cherche à afficher un nombre inconnu d'éléments, or là on affiche chaque élément à énumérer dans une colonne . J'ai essayer par acquis de conscience, mais même topo

    Je continue ma longue recherche.....

    PPDL.


  12. #12
    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
    Et bien, bon courage.

    N'ayant aucune connaissance sur le sujet, je ne vais malheureusement pas pouvoir t'aider plus. Désolée

  13. #13
    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
    Tu n'as pas à être désolée, tu m'as aidé et donner de ton temps, ce qui est précieux (à mes yeux du moins).
    Je te tiens informée sur ce post si cette librairie t'intéresse en conjonction avec struts2.

    A+

    PPDL.

  14. #14
    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 trouvé une solution (partielle car ce n'est pas exactement ce que je veux).
    En fait j'utilise une deuxième table imbriquée en désactivant tout l'habillage.
    C'est malhabile, mais bon ....

    Si vous voulez des renseignements sur la solution, faite-le savoir sur ce post.

    Merci encore à C_NVY pour son soutient

    PPDL.

  15. #15
    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
    Citation Envoyé par petitpasdelune
    Merci encore à C_NVY pour son soutient
    De rien.
    Soutien psychologique mais pas vraiment technique.

  16. #16
    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
    C'est souvent aussi efficace

    PPDL

  17. #17
    Invité de passage
    Inscrit en
    Juin 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1
    Par défaut
    salut!
    peux tu expliquer + en detail ta solution? j'ai exactement le meme souci que toi et je n'ai pas reussi a le resoudre... merci.

  18. #18
    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
    Citation Envoyé par Marionnette
    salut!
    peux tu expliquer + en detail ta solution? j'ai exactement le meme souci que toi et je n'ai pas reussi a le resoudre... merci.
    Ben comme indiqué j'utilise une table imbriquée et je désactive tous les décorateurs. Je prend comme base de la liste l'objet de la cellule mère.

    PPDL.

+ 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