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 :

[html:select] dans un [logic:iterate] : problème de récupération des données


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 43
    Par défaut [html:select] dans un [logic:iterate] : problème de récupération des données
    Bonjour,
    après avoir recherché sur les forum je n'ai pas trouvé de réponse à ma question :

    Dans mon application, j'ai un formulaire. Ce formulaire est en partie construit via des [logic:iterate] qui crée une ligne pour chaque information récupérée.
    Cette information peut prendre trois valeurs, un [html:select] est donc utilisé pour permettre à l'utilisateur de choisir.

    La construction marche très bien avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <logic:iterate id="besEvalEleve" name="evalBesEleve">
        <bean:write  name="besEvalEleve" property="nomBesoin"/>
        <html:select  name="besEvalEleve" property="val">
              <html:option  value="Acquis">Acquis</html:option>
              <html:option value="A_approfondir">A approfondir</html:option>
              <html:option value="Non_acquis">Non Acquis</html:option>
        </html:select></td>
        <html:text  name="besEvalEleve" property="rmq" size="50"/> 
    </logic:iterate>
    Le principe est donc que mon iterate parcours un vecteur contenant de 1 à n besoins différents. Pour chacun d'eux, l'utilisateur doit spécifier, une valeur choisie parmis "Acquis", "A approfondir" et "Non acquis".

    Le problème est que je n'arrive pas à récupérer mes données.

    Si quelqu'un pouvait m'aider...

    NB : ci-dessous mon Bean BesEvalEleve

    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
     
    public class EvaluationBesoin {
     
        private int idEvalBes;
        private int idEval;
        private int idBes;
        private String val;
        private String rmq;
        private String origine;
     
        private String nomBesoin;
     
     
        // constructeur de l'objet
        public EvaluationBesoin() {
        }
     
    ++ les getters et les setters
    De plus, ce bout de code est répété trois fois, pour trois utilisateurs différent sur la meme page (trois utilisateur rempliront le formulaire ensemble et je dois récupérer l'avis de chacun pour chacune des informations)

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 120
    Par défaut Petite précision pour aide
    Tu as bien un vecteur de beans du type BesEvalEleve ?
    Ce n'est pas très clair, je ne vois pas d'ou tu sors ton vecteur !!

  3. #3
    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 existe une solution en utilisant les tags indexés comme ceci :

    Dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <logic:iterate id="besEvalEleve" name="evalBesEleve">
        <bean:write name="besEvalEleve" property="nomBesoin"/>
        <html:select name="besEvalEleve" property="val" indexed="true">
              <html:option  value="Acquis">Acquis</html:option>
              <html:option value="A_approfondir">A approfondir</html:option>
              <html:option value="Non_acquis">Non Acquis</html:option>
        </html:select></td>
        <html:text  name="besEvalEleve" property="rmq" size="50"/> 
    </logic:iterate>
    Dans l'ActionForm (avec ArrayList parce que je n'utilise jamais les vecteurs) :
    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
     
    private ArrayList evalBesEleve;
    public ArrayList getEvalBesEleve()
    {
        return evalBesEleve;
    }
    public void setEvalBesEleve(ArrayList evalBesEleve)
    {
        this.evalBesEleve= evalBesEleve;
    }
    public BesEvalEleve getBesEvalEleve(int i)
    {
        return (BesEvalEleve) evalBesEleve.get(i);
    }
    public void setBesEvalEleve(int i,BesEvalEleve besEvalEleve)
    {
        evalBesEleve.set(i,besEvalEleve) ;
    }
    Ceci suppose que evalBesEleve est une ArrayList de beans BesEvalEleve.

    Il doit aussi y avoir une solution en utilisant le tag nested:iterate mais je maîtrise moins.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 43
    Par défaut
    Bonjour et merci pour vos reponse.

    Oui j'ai bien un vecteur besEvalElev qui contient les différents besoins de celui-ci.

    Pour la deuxièeme réponse, je vais essayer ça lundi et je te dirais.

    Encore merci pour votre aide, bon week end et à lundi

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 43
    Par défaut
    Me revoila,
    Après avoir relu vos réponses, et particulièrement la seconde, je ne comprend pas comment celà peut me permettre de récupérer mes valeurs.

    En effet, pour (essayer de ) mieux expliquer mon problème :

    Dans mon formulaire, j'envoie trois vecteurs principaux qui sont evalBesEleve, evalBesEntreprise,evalBesCollege, qui contienne le meme nombre d'objet.

    Chacun de ces objets est un Bean "besEvalEleve" pour evalBesEleve, besEvalentreprise pour evalBesEntreprise et besEvalcollege pour evalBesCollege....

    Ces beans sont définis par :
    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
     
    public class EvaluationBesoin {
     
        private int idEvalBes;
        private int idEval;
        private int idBes;
        private String val;
        private String rmq;
        private String origine;
     
        private String nomBesoin;
     
     
        // constructeur de l'objet
        public EvaluationBesoin() {
        }
     
        public EvaluationBesoin(int inIdeval, int inIdBes, String inOrigine){
            this.idEval=inIdeval;
            this.idBes=inIdBes;
            this.origine=inOrigine;
     
        }
    Dans mon formulaire, l'utilisateur doit donc renseigner 3 parties qui correspondent à mes trois vecteur, ces trois parties contiennent le meme nombre de ligne (un ligne par besoin).

    Mon probleme est que je n'arrive pas à récupérer mes valeurs car les "names" sont tous les meme puisque que générés automatiquement.


    Je sais que ce n'est surement pas très clair, mais si quelqu'un pouvait essayer de comprendre, je serais heureux de lui donner toutes les explications qu'il désire....

  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
    Ce n'est effectivement pas très clair, enfin pour moi.
    Ta première demande l'était beaucoup plus à mes yeux.

    Sache que si tu utilises les tags indexés comme je te l'ai expliqué et donc si tu codes ceci dans le logic:iterate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        <html:select name="besEvalEleve" property="val" indexed="true">
              <html:option  value="Acquis">Acquis</html:option>
              <html:option value="A_approfondir">A approfondir</html:option>
              <html:option value="Non_acquis">Non Acquis</html:option>
        </html:select>
    Le html généré sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        <select name="besEvalEleve[0].val">
              <option value="Acquis">Acquis</option>
              <option value="A_approfondir">A approfondir</option>
              <option value="Non_acquis">Non Acquis</option>
        </select>
    Pour le premier objet de ton Vector.
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        <select name="besEvalEleve[1].val">
              <option value="Acquis">Acquis</option>
              <option value="A_approfondir">A approfondir</option>
              <option value="Non_acquis">Non Acquis</option>
        </select>
    pour le second.
    Et ce pour chacun des objets de ton vecteur evalBesEleve.

    Et grâce aux méthodes suivantes de l'ActionForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public BesEvalEleve getBesEvalEleve(int i)
    {
        return (BesEvalEleve) evalBesEleve.get(i);
    }
    public void setBesEvalEleve(int i,BesEvalEleve besEvalEleve)
    {
        evalBesEleve.set(i,besEvalEleve) ;
    }
    via l'indice i, tu récupèreras la bonne valeur sélectée pour chacun des objets.

    Il faut juste que tu adaptes le code des deux méthodes de l'ActionForm pour un Vector parce que celui-ci fonctionne pour une ArrayList.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 43
    Par défaut
    pour plus de précision, voici à quoi ressemble mon 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    <logic:iterate id="besEvalEleve" name="evalBesEleve">
        <bean:write  name="besEvalEleve" property="nomBesoin" />
        <html:select  name="besEvalEleve" property="val">
              <html:option  value="A_renseigner">A renseigner</html:option>
              <html:option  value="Acquis">Acquis</html:option>
              <html:option value="A_approfondir">A approfondir</html:option>
              <html:option value="Non_acquis">Non acquis</html:option>
        </html:select>
        <html:text  name="besEvalEleve" property="rmq" size="50"/> 
    </logic:iterate>
     
    <logic:iterate id="besEvalEntreprise" name="evalBesEntreprise">
        <bean:write  name="besEvalEntreprise" property="nomBesoin"/>
        <html:select  name="besEvalEntreprise" property="val">
              <html:option  value="A_renseigner"> </html:option>
              <html:option  value="Acquis">Acquis</html:option>
              <html:option value="A_approfondir">A approfondir</html:option>
              <html:option value="Non_acquis">Non acquis</html:option>
        </html:select> 
        <html:text  name="besEvalEntreprise" property="rmq" size="50"/>
    </logic:iterate>
     
     
    <logic:iterate id="besEvalCollege" name="evalBesCollege">
        <bean:write  name="besEvalCollege" property="nomBesoin"/> 
        <html:select  name="besEvalCollege" property="val">
               <html:option  value="A_renseigner"> </html:option>
               <html:option  value="Acquis">Acquis</html:option>
               <html:option value="A_approfondir">A approfondir</html:option>
               <html:option value="Non_acquis">Non acquis</html:option>
        </html:select>
        <html:text  name="besEvalCollege" property="rmq" size="50"/>
    </logic:iterate>
    Ansi, chacun de mes trois vecteurs, me permet de générer une partie du formulaire, comprenant un select option, et un champs texte.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/10/2011, 13h22
  2. Réponses: 36
    Dernier message: 26/11/2008, 16h55
  3. html:text dans un logic:iterate
    Par ptitom1381 dans le forum Struts 1
    Réponses: 4
    Dernier message: 07/11/2008, 13h11
  4. [MySQL] Problème de récupération des données dans une fonction
    Par highman dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/10/2006, 20h04
  5. Réponses: 22
    Dernier message: 05/07/2006, 15h21

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