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. #1
    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 [Struts] logic:iterate sur HashMap
    Bonjour
    j'affiche une Properties (cf. HashTable) a l'aide d'un logic:iterate.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <logic:iterate id="element" name="rscForm" property="properties">
    	<html:text size="80" name="element" property="key" disabled="true"/>
    	<html:text size="80" name="element" property="value"/>
    </logic:iterate>
    Ceci fonctionne tres bien. Le probleme est que je fait des html:text car je souhaite modifier les valeurs. Mais quand je valide mon formulaire, dans mon Action suivante le Properties est exactement le meme qu'au depart.
    On dirait que le formulaire ne fait pas le lien entre mon Properties et chaque champ de saisie.
    Voici mon FormBean:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class FXOResourcesForm extends ActionForm {
     
    	private Properties properties;
     
    	public Properties getProperties() {return properties;}
    	public void setProperties(Properties prop) {properties = prop;}
    }
    Est ce que quelqu'un sait où je me trompe?
    Merci d'avance

  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 plutôt d'utiliser le nested:iterate.
    Jette un oeil au post suivant http://www.developpez.net/forums/vie...nested+iterate

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4
    Par défaut
    Salut,

    Il te faut utiliser l'attribut indexed="true" de <html:text>. Le problème est qu'ensuite les éléments saisis ne sont pas directement copiés dans ta Map par Struts. Il te faut dans ton action aller les chercher "à la main" en itérant sur ta liste et en utilisant la méthode request.getParameter("nom["+i+"].parametre").

    Bon courage !

  4. #4
    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
    Désolé je me suis un peu emporté...
    Tataw, tu dis qu'il faut que je récupère mes valeurs avec la methode :
    request.getProperty("nomDeLaPropriete["+i+"]")
    mais la methode getProperty n'est pas définie pour une httpServletRequest...

    Et sinon, que veux tu dire par nomdelapropriété? Je fais un iterate sur une HashTable. Et j'affiche "key" et "value". Est ce que c'est le nom de la HashTable?

    Merciencore

  5. #5
    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 pour ton lien c_nvy.
    Le probleme est qu'ils ont une Collection et moi une HashTable. J'ai donc quand meme essayer et voila mon code et l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    			<nested:iterate name="rscForm" property="properties">				
    			    	<nested:text property="key" disabled="true"/>
    			    	<nested:text property="value" />
    			</nested:iterate>
    L'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Erreur de servlet]-[No getter method for property properties(errors.integer).key of bean rscForm]: javax.servlet.jsp.JspException: No getter method for property properties(errors.integer).key of bean rscForm
    D'apres l'erreur, il considere que j'ai une Collection et essaie de faire maCollection(i). Mais ca ne marche pas pour une HashTable.

    Ou est ce que je me trompe stp?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4
    Par défaut
    Désolé, ce n'est pas getProperty mais getParameter.

    Dans ton cas, ça devrait ressembler à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     int i=0;
    while(request.getParameter("element["+i+"].value")!=null)
    {
    String sKey = request.getParameter("element["+i+"].key");
    String sValue = request.getParameter("element["+i+"].value");
     
    // Ensuite tu replaces sValue dans ta Map à l'endroit sKey
    }

  7. #7
    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 pour ton code.
    Le probleme est qu'il ne passe pas dans la boucle... J'ai meme essayé de changer la condition du while mais apparement, il n'a aucun attribut avec ce nom là!!!
    Est ce que quelque chose cloche avec ma jsp?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <logic:iterate id="element" name="rscForm" property="properties">		
    	<html:text size="80" name="element" property="key" indexed="true" disabled="true"/> 
    	<html:text size="80" name="element" property="value" indexed="true"/> 	
    </logic:iterate>
    PS: c_nvy je jongle entre les 2 solutions... je n'abandonne pas l'idee d'utiliser un nested SI ca peux marcher...

  8. #8
    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
    Et comme ca???

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

  9. #9
    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 pour ton aide Benjamin.
    Mais maintenant, j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Erreur de servlet]-[No collection found]: javax.servlet.jsp.JspException: No collection found
    Je me demande si c'est possible d'appliquer simplement un nested sur une HashTable pour ce que je veux faire...

  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
    Citation Envoyé par romdelf
    PS: c_nvy je jongle entre les 2 solutions... je n'abandonne pas l'idee d'utiliser un nested SI ca peux marcher...
    Après avoir regardé de plus près, je ne suis pas certaine que ça puisse marcher avec une HashMap.
    Par contre, avec les tags indexés, il y a peut-être une solution.
    Je l'ai déjà mis en oeuvre avec une ArrayList et j'avoue que c'est bien plus compliqué avec un objet Properties.
    Je suis en train de tester pour voir.
    Je te tiens au courant.

    La solution de Benjamin (le pro du nested:iterate ) me semble intéressante. Donc à tester !

  11. #11
    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
    Mais pourquoi veux tu afficher la map dans ta jsp, tu peux peut etre formatter tes données en une arraylist de labelValueBean non????

  12. #12
    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
    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

  13. #13
    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 bcp de ton aide c_nuy!

    En fait, Benjamin, si je fais un nested Iterate sur properties.values, comment a l'interieur je peux faire un nested:text de la key?

    Citation Envoyé par SEMPERE Benjamin
    Mais pourquoi veux tu afficher la map dans ta jsp, tu peux peut etre formatter tes données en une arraylist de labelValueBean non????
    Oui tu as raison. Je peux faire ainsi. C'est juste que j'ai un Properties et je pensais pouvoir appliquer simplement un nested:iterate dessus!
    Je vais essayer...

  14. #14
    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 romdelf
    Oui tu as raison. Je peux faire ainsi. C'est juste que j'ai un Properties et je pensais pouvoir appliquer simplement un nested:iterate dessus!
    Je vais essayer...
    Il faut noté que lorsque tu itères sur une HashMap, tu n'as pas de notion d'ordre => tu peux avoir deux pages différentes entre deux refresh!!!

    La vue (1 ere fois)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    prop: toto value: totoVal
    prop: tata value: tataVal
    La vue (après refresh)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    prop: tata value: tataVal
    prop: toto value: totoVal

  15. #15
    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
    Oui mais pour moi, l'ordre n'a aucune importance.

    Par contre, en y reflechissant bien, ce n'est pas terrible de passer par une Arraylist de LabelValueBean.
    Je vous explique ce que je veux faire. J'ai chargé le fichier de resources dans un Properties avec les labels et valeurs. Et je souhaite les modifier dans ma jsp. Donc j'affiche un tableau avec les labels et les valeurs.

    Mais si j'utilises l'Arraylist, je dois recréer manuellement un nouveau Properties avec toutes les LabelValueBean à la fin. Alors que si j'arrive a utiliser directement le Properties, struts changera automatiquement les valeurs directement dans mon Properties...

    j'espere etre clair...

  16. #16
    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 bien ca marche pour ta solution Benjamin avec une ArrayList de LabelValueBean.
    Mais je trouve ca nul que l'on ne puisse pas agir directement avec une Map

    Enfin, si quelqu'un a cette solution (parfaite), je suis preneur.
    Merci en tout cas à tout le monde.

  17. #17
    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
    Peut etre comme cà

    Ton form
    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
     
        private Map values = null;
     
        public void setValues(Map values) {
            this.values = values;
        }
        public Map getValues() {
            return this.values;
        }
        public void setValue(String key, Object value) {
            getValues().put(key,value);
        }
        public Object getValue(String key) {
            return getValues().get(key);
        }
    Ta jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <logic:iterate id="currentKey" name="rscForm" property="properties">    
       <!-- ici tu affiches la valeur associé a ta clé-->
       <html:text property="value(currentKey)"/>
    </logic:iterate>

  18. #18
    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 de ton aide Benjamin
    Ta solution ne plante pas. Malheureusement, La liste est vide. Je pense que c'est parce qu'il ne va pas chercher la value dans le formBean!
    L'occurence courante est currentKey. C'est un couple de (clé=valeur)! Et si tu mets apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:text property="value(currentKey)"/>
    , c'est sur cet oblet courant "currentKey" qu'il va chercher la property value(currentKey) ET NON sur le formulaire.
    Est ce que je me trompe?

    La seule facon (que j'ai trouvé) pour afficher la liste est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <logic:iterate id="currentKey" name="rscForm" property="properties">
    	<html:text size="80" name="currentKey" property="key"/> 
    	<html:text size="80" name="currentKey" property="value"/>
    </logic:iterate>
    Le probleme est que quand je soumets le formulaire, j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Erreur de servlet]-[BeanUtils.populate]: java.lang.reflect.InvocationTargetException: Cannot set value
    J'ai plus d'idée...

  19. #19
    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
    Quel typage objet utilise tu pour tes clé et valeurs??? En gros quels sont le type de ta clé et le type de ta valeur?

  20. #20
    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
    Ce sont des String. Mais je ne fais aucun typage...

    j'utilise la methode properties.load(FileInputStream in); pour populer mon Properties.
    http://java.sun.com/j2se/1.4.2/docs/api/java/util/Properties.html

    Chaque clé et valeur sont prises de mon fichier de properties. Donc c'est forcement des String...

    Je ne fais rien de plus!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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