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] Tableau de bean


Sujet :

Struts 1 Java

  1. #1
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut [Struts] Tableau de bean
    Bonjour,

    Actuellement je récupère dans mon Form un ArrayList de Bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class CreerForm extends ActionForm {
    ..
      private ArrayList champPerso = new ArrayList();
    ..
    Je le parcours en dynamique dans ma page JSP et je créé un champ de saisie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <c:forEach var="cp" items="${ChampPerso}" varStatus="cp1">	 
      <tr class="text">
         <td nowrap="nowrap" align="right" class="text">
               <c:out    value="${cp.prv_libelle}" /> :&nbsp</td>
         <td><html:text name="creerForm" 
                       property="champPerso(${cp1.count})" 
                                          value="${cp.prv_value}" 
                                          styleClass="strutstextbox"/></td>
       </tr>
    </c:forEach>
    Le problème c'est que lors de la validation je n'arrive pas à récupérer les valeurs saisies dans les champs 'champPerso(i)'.
    Je dois mal m'y prendre, j'ai du mal à concevoir une solution apppropriée.

    Merci

  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
    Si j'ai bien compris, l'attribut que tu veux modifier est prv_value et c'est une propriété du bean stocké dans une ArrayList.
    Il faut que tu utilises les tags indexés.
    Il faut donc coder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <c:forEach items="${champPerso}" var="tonBean">
      <c:out value="{tonBean.prv_libelle}"/>
      <html:text name="tonBean" property="prv_value" indexed="true"/>
    </c:forEach>
    Et dans l'ActionForm, en plus du getter et setter sur ton ArrayList champPerso, il faut implémenter le getter et setter sur ton bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private ArrayList champPerso ;
    public TonBean getTonBean(int i)
    {
      return (TonBean) champPerso.get(i);
    }
    public void setTonBean(int i,TonBean tonBean)
    {
      champPerso.set(i,tonBean) ;
    }
    J'ai mis un c minuscule à champPerso parce que normalement, les noms des propriétés doivent commencer par une minuscule.

  3. #3
    Membre Expert
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut
    Merci pour votre aide
    Par contre j'ai du mal à tout saisir, c'est assez nouveau pour moi tout cela ...

    J'ai du mal à comprendre le get du bean dans mon Form.
    D'autre part j'ai essayé et plus rien ne s'affiche je suppose que dans le code de mon action j'ai du rater quelque chose :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Ramène un tableau de bean renseigné
    champPerso = InitChampPersoBean(creerActifActiviteLocaliseForm
    				.getT5Classe());
     
    // Affectation du bean au Form
    creerActifActiviteLocaliseForm.setChampPerso(champPerso);
    for (i=0;i<champPerso.size();i++){
    creerActifActiviteLocaliseForm.setCreerActifChampPersoBean(i, (CreerActifChampPersoBean) champPerso.get(i));
    }
     
    request.getSession().setAttribute("ChampPerso", champPerso);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <c:forEach items="${champPerso}" var="ChampPerso">
    <tr class="text">
    	<td nowrap="nowrap" align="right" class="text">
                        <c:out  value="${ChampPerso.prv_libelle}" /> :&nbsp</td>
    	<td><html:text name="ChampPerso" property="prv_value"
                             styleClass="strutstextbox" indexed="true"/></td>
    </tr>
    </c:forEach>
    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
     
    public ArrayList getChampPerso() {
    	return champPerso;
    }
    public void setChampPerso(ArrayList champPerso) {
    	this.champPerso = champPerso;
    }
     
    public CreerActifChampPersoBean getCreerActifChampPersoBean(int i) 
    { 
    	  return (CreerActifChampPersoBean) champPerso.get(i); 
    } 
    public void setCreerActifChampPersoBean (int i,CreerActifChampPersoBean tonBean) 
    { 
    	 champPerso.set(i,tonBean) ; 
    }
    Merci

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut
    Enfin j'ai trouvé ...
    Merci pour tout.

    Voici mon code JSTL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <c:forEach items="${creerActifForm.champPerso}" var="cp" varStatus="cPerso">
       <tr class="text">
            <td nowrap="nowrap" align="right" class="text">
                    <c:out  value="${cp.prv_libelle}" /> :&nbsp</td>
             <td><html:text 
                        property="champPerso[${cPerso.index}].prv_value"  
                                        value="${cp.prv_value}" /></td>
        </tr>
    </c:forEach>
    Dans mon Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    champPerso = InitChampPersoBean(creerActifActiviteLocaliseForm
    				.getT5Classe());
    // Affectation du bean au Form
    creerActifActiviteLocaliseForm.setChampPerso(champPerso);
    Et mon Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private Collection champPerso;
    Avec cette syntax je ne sais pas comment il fait mais Struts retrouve ces billes lorsque l'utilisateur saisi un champ je le retrouve dans mon Form.

    ++

  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
    Ta solution est vraiment très intéressante.
    Je pensais sincèrement qu'on ne pouvait faire cela qu'en utilisant les tags indexés.

    Peux-tu me confirmer que si, par exemple, tu modifies le 2ème attribut prv_value de ton tableau html, cela modifie bien l'attribut prv_value du bean figurant en 2ème position dans l'ArrayList ?

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut
    oui je te le confirme

    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
    35
    36
    37
    38
    39
     
    "champPerso"= ArrayList  (id=462)
    	elementData= Object[16]  (id=473)
    		[0]= CreerActifChampPersoBean  (id=475)
    			apr_class= "*"
    			apr_property= "ATA"
    			pro_rentity= null
    			pro_text= "ATA"
    			pro_type= "CHAR"
    			prv_dvalue= null
    			prv_libelle= "ATA"
    			prv_nvalue= null
    			prv_value= "test1"
    		[1]= CreerActifChampPersoBean  (id=477)
    			apr_class= "*"
    			apr_property= "DETSUIV"
    			pro_rentity= null
    			pro_text= "Date d'étal. suivante"
    			pro_type= "DATE"
    			prv_dvalue= null
    			prv_libelle= "Date d'étal. suivante"
    			prv_nvalue= null
    			prv_value= "test2"
    		[2]= CreerActifChampPersoBean  (id=478)
    		[3]= CreerActifChampPersoBean  (id=479)
    		[4]= CreerActifChampPersoBean  (id=480)
    		[5]= CreerActifChampPersoBean  (id=481)
    		[6]= CreerActifChampPersoBean  (id=482)
    		[7]= CreerActifChampPersoBean  (id=483)
    		[8]= CreerActifChampPersoBean  (id=484)
    		[9]= CreerActifChampPersoBean  (id=485)
    		[10]= CreerActifChampPersoBean  (id=486)
    		[11]= CreerActifChampPersoBean  (id=487)
    		[12]= null
    		[13]= null
    		[14]= null
    		[15]= null
    	modCount= 12
    	size= 12
    Le premier à test1 et le second test2

  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
    Merci de ta réponse cosmos38240.
    Et dans ton ActionForm, tu n'as bien qu'un getter et un setter sur l'ArrayList champPerso ?

  9. #9
    Membre éclairé
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Par défaut
    Oui c'est exactement ca.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private Collection champPerso;
     
    public Collection getChampPerso() {
    	return champPerso;
    }
     
    public void setChampPerso(Collection champPerso) {
    	this.champPerso = champPerso;
    }

  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
    Merci encore pour ces précisions.
    Pour sûr, ta solution est beaucoup plus simple à mettre en oeuvre que la mienne.
    Je vais mettre ça dans un coin, ça peut servir...

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

Discussions similaires

  1. [Struts] [JavaBean] Deux beans dans une Action
    Par jak0 dans le forum Struts 1
    Réponses: 2
    Dernier message: 19/05/2005, 16h02
  2. [Struts]pb de Bean define
    Par tscoops dans le forum Struts 1
    Réponses: 8
    Dernier message: 02/03/2005, 09h12
  3. [ Struts] pbs avec <bean:message key=.../>
    Par njac dans le forum Struts 1
    Réponses: 3
    Dernier message: 01/12/2004, 14h08
  4. [jsp][struts] Acces au bean d'un <logic:iterate>
    Par Altherac dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 29/09/2004, 13h02
  5. [Struts]Accéder un bean dans le bean
    Par MasterMic dans le forum Struts 1
    Réponses: 4
    Dernier message: 13/09/2004, 10h23

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