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 1 Java Discussion :

[logic:iterate] tableau de string et html:hidden


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut [logic:iterate] tableau de string et html:hidden
    Bonjour,
    Je veux passer un tableau de string d'une action à l'autre, en passant par une page jsp.

    Le tableau dans mon formulaire (la propriété a un getter et un setter) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private String[] listeCaisses;
    Dans la page jsp, si j'essaye d'afficher un bean:write dans l'iterate, ça fonctionne, mais quand j'essaye d'utiliser un html:hidden, a fonctionne point.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <logic:iterate name="monForm" property="listeCaisses" id="item">
    	<bean:write name="item"/>
    </logic:iterate>
    Comment faire pour que ça marche ?
    Ou bien est-ce que je fais fausse route, et qu'il y a un moyen plus simple (et propre) de passer ce tableau de String ?

    Sémhur

  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
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <logic:iterate name="monForm" property="listeCaisses" id="item" indexId="index">
    	<html:hidden property="listeCaisses[${index}]"/>
    </logic:iterate>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut
    Merci de ton aide.
    J'obtiens cette erreur :
    javax.servlet.jsp.JspException: ServletException in '/jsp/mapage.jsp': Invalid argument looking up property: "listeCaisses[${index}]" of bean: "org.apache.struts.taglib.html.BEAN"
    J'ai essayé aussi ['${index}'] et [<%=index%>] mais le résultat est le même.

  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
    Il faut mettre le tag logic:iterate dans un tag html:form.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut
    Le problème c'est qu'il y est déjà (et ça fonctionne avec le bean:write dans le logic:iterate). D'ailleurs je reçois bien mes autres paramètres. Il n'y a que quand j'essaye avec le html:hidden que ça plante .

  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
    Effectivement, je me suis trompée.

    Le message d'erreur n'est pas dû au fait que tu n'as pas mis de tag html:form mais tout simplement parce que l'EL ${index} n'est pas interprétée.

    Il faut donc utiliser la tld struts-html-el.tld :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <logic:iterate name="monForm" property="listeCaisses" id="item" indexId="index">
    	<html-el:hidden property="listeCaisses[${index}]"/>
    </logic:iterate>
    sans oublier d'ajouter au début de la jsp la directive taglib qui pointe sur cette tld.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut
    Merci pour la solution. Je ne peux pas l'appliquer car je travaille sur une version trop ancienne de Struts, qui ne prend pas en charge les EL
    Mais je mets cette discussion en résolu.

  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
    Dans ce cas, utilise une scriptlet comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <logic:iterate name="monForm" property="listeCaisses" id="item" indexId="index">
    	<html:hidden property="<%="listeCaisses["+index+"]"%>"/>
    </logic:iterate>

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut
    Effectivement, ça fonctionne , je récupère mes valeurs dans la page JSP !
    Par contre après avoir validé le formulaire, ça plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.lang.NullPointerException
    	at org.apache.commons.beanutils.PropertyUtilsBean.setIndexedProperty(PropertyUtilsBean.java:1414)
    Je suppose que le public String[] getListeCaisses() de mon ActionForm ne suffit pas. Que faut-il mettre en plus (ou à la place) ?

  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
    En principe, dans l'ActionForm, il suffit de coder getter et setter sur listeCaisses.
    Avec un tableau de String, il n'est pas utile de coder getter et setter indexé.

    Par contre, l'ActionForm est-il bien dans le scope session ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut
    Eh non, il était dans la request !
    Ça fonctionne maintenant, merci beaucoup.

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

Discussions similaires

  1. Parcourir un tableau de String avec logic:iterate
    Par casawi dans le forum Struts 1
    Réponses: 7
    Dernier message: 07/02/2008, 14h40
  2. [Struts] <logic:iterate> + <html:multibox>
    Par asx9 dans le forum Struts 1
    Réponses: 10
    Dernier message: 22/11/2005, 13h18
  3. [STRUTS] logic:iterate / html:input
    Par chimera dans le forum Struts 1
    Réponses: 12
    Dernier message: 13/10/2005, 11h11
  4. [ STRUTS ] [ LOGIC:ITERATE ] tableau dans un formulaire
    Par LoulouFifi dans le forum Struts 1
    Réponses: 3
    Dernier message: 18/06/2004, 16h19
  5. [Struts][logic:iterate] Probleme avec String
    Par julienOriano dans le forum Struts 1
    Réponses: 7
    Dernier message: 15/06/2004, 09h39

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