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 :

[Struts] logic:iterate sur HashMap


Sujet :

Struts 1 Java

  1. #21
    Membre confirmé Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Par défaut
    Je pense en fait qu'il faudrait peut etre faire quelque chose comme ca!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <logic:iterate id="currentKey" name="rscForm" property="properties">
    	<html:text name="currentKey" property="key"/> 
    	<html:text name="rscForm" property="value(currentKey)"/>
    </logic:iterate>
    Le probleme est que le second champ est vide Car key n'existe pas pour mon Form.

    il faudrait que j'ai un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     property="value(<bean:write name="currentKey" property="key" />)
    OU
    property="value(currentKey.key)
    Mais ca ne marche pas...

  2. #22
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Par défaut
    Tu peux essayer avec les EL fournis avec la distrib de struts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <logic:iterate id="currentKey" name="rscForm" property="properties"> 
       <html:text name="currentKey" property="key"/> 
       <html-el:text name="rscForm" property="value(${currentKey.key})"/> 
    </logic:iterate>
    en haut de ta page jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %>
    après avoir installé tes EL dans ton projet

  3. #23
    Membre confirmé Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Par défaut
    J'ai ajouté le code que tu m'as dit.
    De plus, j'ai ajouté le fichier struts-html-el.tld dans mon dossier WEB-INF, ainsi que ceci dans mon web.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	<taglib>
    		<taglib-uri>/WEB-INF/struts-html-el.tld</taglib-uri>
    		<taglib-location>/WEB-INF/struts-html-el.tld</taglib-location>
    	</taglib>
    Mais la jsp refuse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JspTranslate : Impossible de charger la classe org.apache.strutsel.taglib.html.ELTextTag.
    Que faut il faire de plus pour initialiser les EL, stp?

  4. #24
    Membre confirmé Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Par défaut
    Desolé...
    J'avais pas redemarré mon rpojet... les jars que j'ai ajouté n'etait pas chargé...

  5. #25
    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
    Salut romdelf,
    J'ai fait des tests dans tous les sens mais sans plus de succès que toi.
    Un vrai casse-tête chinois ton problème.

  6. #26
    Membre confirmé Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Par défaut
    Et non... toujours pas...
    avec le EL, j'ai toujours l'affichage correct. Mais comme toujours, quand je soumets, ca plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Erreur de servlet]-[BeanUtils.populate]: java.lang.IllegalArgumentException: Invalid mapped property 'value(form'
    Alors, je sens vraiment que la solution (mon propre pour moi) de la Arraylist avec les labelValueBean conviendra, faute de mieux...

    Etrange que l'on arrive pas à modifier une HashMap avec un nested:iterate...
    PS: c_nuy, c'est clair... Et dire que je pensais faire ca en 2min...

  7. #27
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Par défaut
    Citation Envoyé par SEMPERE Benjamin
    Pour l'erreur citée précédement, je pense que le problème est le suivant
    properties.values() retourne une interface, l'interface Collection

    La tag lib iterate fournie pas Struts permet d'itérer une IMPLEMENTATION de collection, donc une Arraylist, LinkedList... mais pas une Collection
    Essayons de créer une implémentation de cette collection:
    Dans ton action tu crée une ArrayList de clé valeur de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TonForm rscForm = (TonForm)form;
    Properties properties = ...;
    ArrayList keyValueAL = new ArrayList(properties.values);
    tonForm.setKeyValueAL(keyValueAL);
    ...

    Dans ta jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <nested:iterate name="rscForm" property="keyValueAL"> 
      <nested:text property="key"/> 
      <nested:text property="value"/> 
    </nestedterate>

  8. #28
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Par défaut
    En modifiant les (clé-valeur) qui sont issues de la méthode (properties.values()), tu modifieras par référence ta HashTable
    http://java.sun.com/j2se/1.4.2/docs/....html#values()

  9. #29
    Membre confirmé Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Par défaut
    Je pense qu'on ne doit pas etre loin de la solution. Ta solution semble bonne!

    J'ai finalement l'erreur suivante au chargement de la page jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [Erreur de servlet]-[No getter method for property valProperties[0].key of bean rscForm]: javax.servlet.jsp.JspException: No getter method for property valProperties[0].key of bean rscForm
    OU
    ][Erreur de servlet]-[No getter method for property valProperties[0].value ......
    Pour la 1re erreur, c'est normal car la ArrayList ne possède pas les key!!! Seulement les values!!! Enfin, je vais reflechir à cela.
    Mon code au cas ou...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <nested:iterate name="rscForm" property="valProperties"> 
    	<nested:text property="key"/> 
    	<nested:text property="value"/> 
    </nested:iterate>
     
    public class FXOResourcesForm extends ActionForm {
     
    	private ArrayList valProperties;
    	private Properties properties;
    	//ET les getters & setters
    }
    Merci encore pour votre aide...
    Et si jamais qq'1 trouve la solution à ce problème, qu'il n'hesite pas à me contacter par MP.
    Merci encore

  10. #30
    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 ce test-là :
    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
     
    public class PropertyForm extends ActionForm {
     
      private Properties prop = null ;
     
      public Object getObjectsMapped(String key)
      {
        return this.prop.get(key);
      }
      public void setObjectsMapped(String key,Object value)
      {
        this.prop.put(key,value) ;
      }
      public Properties getProp()
      {
      return prop ;
      }
      public void setProp(Properties prop)
      {
      this.prop = prop ;
      }
    }
    Dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <html:form action="processProperty">
    <table>
    <logic:iterate name="propertyForm" id="item" property="prop">
    <tr>
    <td><html:text name="item" property="key" disabled="true"/></td>
    <td><html-el:text name="propertyForm" property="objectsMapped(${item.key})"/></td>		
    </tr>
    </logic:iterate>
    </table>
    <html:submit value="Modifier"/>
    </html:form>
    L'affichage se passe bien.
    Quand je modifie une valeur et que je fais submit, il passe bien dans la méthode setObjectsMapped et les attributs key et value ont les bonnes valeurs.
    Mais j'ai le message d'erreur suivant dans la log de Tomcat :
    Caused by: java.lang.NullPointerException
    at test.PropertyForm.setObjectsMapped(PropertyForm.java:36)
    Et là, j'avoue que je ne comprends pas pourquoi

  11. #31
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Par défaut
    ton attribut prop est null dans ton formBean, l'as tu initialisé????

  12. #32
    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
    Bien sûr !
    J'ai codé ceci dans l'Action qui initialise le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class InitPropertyAction extends Action {
     
      public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)
    	throws Exception
      {
    	PropertyForm propertyForm = (PropertyForm) form ;
    	Properties prop = new Properties() ;
    	prop.put("key1","value1") ;
    	prop.put("key2","value2") ;
    	propertyForm.setProp(prop) ;
    	return mapping.findForward("success") ;
      }
    }
    Et ça m'affiche bien key1 value1 et key2 value2 dans ma jsp.

  13. #33
    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 fait, suite à ta remarque Benjamin, j'ai modifié mon scope="request" en scope="session" et maintenant ça marche !!!
    Tu ne vas jamais y croire romdelf

  14. #34
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Par défaut
    Citation Envoyé par c_nvy
    En fait, suite à ta remarque Benjamin, j'ai modifié mon scope="request" en scope="session" et maintenant ça marche !!!
    Tu ne vas jamais y croire romdelf
    Ca parait logique, en scope request ton form est recréé à chaque fois

  15. #35
    Membre confirmé Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Par défaut
    MERCI MILE FOIS A VOUS 2!
    Je n'y croyais plus......

  16. #36
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Par défaut
    Citation Envoyé par c_nvy
    En fait, suite à ta remarque Benjamin, j'ai modifié mon scope="request" en scope="session" et maintenant ça marche !!!
    Tu ne vas jamais y croire romdelf
    Bravo tu as assuré, je vais mettre ça dans un coin

  17. #37
    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 SEMPERE Benjamin
    Citation Envoyé par c_nvy
    En fait, suite à ta remarque Benjamin, j'ai modifié mon scope="request" en scope="session" et maintenant ça marche !!!
    Tu ne vas jamais y croire romdelf
    Bravo tu as assuré, je vais mettre ça dans un coin
    Merci mais sans certaines de tes remarques dans ce post, je n'y serais pas arrivée.

    Et je suis ravie d'avoir contribué à la résolution du problème de romdelf, sachant que moi aussi, je vais mettre ça dans un coin. Ca peut servir

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Logic iterate sur HashMaps imbriquées
    Par MASSAKA dans le forum Struts 1
    Réponses: 2
    Dernier message: 13/03/2008, 15h17
  2. [Struts]logic:iterate - une ligne sur deux en couleur
    Par jeb001 dans le forum Struts 1
    Réponses: 24
    Dernier message: 17/10/2005, 15h07
  3. [Struts] <logic:iterate> sur une collection d objets c
    Par trax020 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/05/2005, 00h11
  4. [Struts][logic:iterate] Probleme avec String
    Par julienOriano dans le forum Struts 1
    Réponses: 7
    Dernier message: 15/06/2004, 09h39
  5. [Struts] logic:iterate avec un Vector
    Par laurentb dans le forum Struts 1
    Réponses: 18
    Dernier message: 03/03/2004, 14h42

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