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

Servlets/JSP Java Discussion :

[Struts][JSP] Sous-propriété de bean non rapatriée


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2004
    Messages : 103
    Points : 78
    Points
    78
    Par défaut [Struts][JSP] Sous-propriété de bean non rapatriée
    Bonjour à tous, voici mon problème

    j'ai une JSP avec ce code-ci
    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
     
    <%-- Adresse (logique itérative) --%> 
    <logic:iterate id="adresse" indexId="idAdresse" name="dossierForm" property="dossierForm.adresses">
    <tr>
    <td class="green10">
    <bean:write name="adresse" property="typeAdresse.libelle" />
    </td>
    <td>
    <nested:nest property="adresse">
    <nested:text 
    property="contenuAdresse"
    styleClass="green10"
    indexed="true" />
    </nested:nest>
    </td>
    </tr>
    </logic:iterate>
    Ceci affiche bien dans le formulaire quelque chose qui ressemble à :

    Adresse 1 [ ]
    Adresse 2 [ ]
    Adresse 3 [ ]
    c/o [ ]
    p.a [ ]

    Et je vois bien dans le fichier source que les zones de texte sont référencés sous les noms "adresse[x].contenuAdresse" où x est l'id.

    Le bean java associé est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class DossierForm extends ValidatorForm {
     
    private static final Log log = LogFactory.getLog("DossierForm"); 
    private DossierFormValueObject dossierForm = new DossierFormValueObject();
     
    [...]
     
    }
    Dans DossierFormValueObject j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class DossierFormValueObject extends AbstractData {
    AdresseValueObject[] adresses = null;
     
    [...]
     
    }
    Mais quand je poste mon formulaire, le tableau d'adresses est toujours null. J'ai essayé avec une Collection, c'est pareil. Avec la balise nested et sans, c'est la même chose.


    Par contre, j'ai une liste déroulante multi-choix qui va stocker ses valeurs dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private Integer[] competences = null;
    et là je récupère bien des valeurs...


    Auriez vous une idée sur la façon dont je dois m'y prendre, j'aimerais éviter de passer par un tableau de String pour récupérer les contenus (problème d'évolutivité...).

    Merci d'avance, A+

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 105
    Points : 107
    Points
    107
    Par défaut
    Lis cette article, il t'explique très bien comment utilisé propriété du Form de type List ou Collections d'objets.

    http://www.developer.com/java/web/article.php/2233591

    Note : Si tu veux récupérer des données saisies de ton form et qui sont de type collection, tu es obligé de mettre ton form en scope= session
    Mais l'article dit tout et tu as des exemples de code pour expliciter tout ca.

    Voili voila
    "Plus on fait de conneries, moins on en aura à faire...."

  3. #3
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2004
    Messages : 103
    Points : 78
    Points
    78
    Par défaut
    Merci Louloufifi pour ta réponse,
    malheureusement ton lien ne m'a pas beaucoup aidé, vu que je n'utilise pas les dynaforms.
    Je ne comprends pas non plus comment le fait de porter en session mon formulaire me donnerait accès à mes collections ?

    J'ai "browsé" la FAQ de Struts (http://jakarta.apache.org/struts/faqs/indexedprops.html) et je suis arrivé à peu près à mes fins...

  4. #4
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2004
    Messages : 103
    Points : 78
    Points
    78
    Par défaut
    La solution consiste donc à concaténer l'index (donc dans un logic:iterate) du bean "nested" (la sous propriété de bean, ici adressees) qui nous intéresse 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
    13
    14
     
    <logic:iterate id="adresse" indexId="idAdresse" name="dossierForm" property="dossierForm.adresses">
    				<tr>
    					<td class="green10">
    						<bean:write name="adresse" property="typeAdresse.libelle" />
    					</td>
    					<td>
    					<html:text 
    						styleClass="green10"
    						name="dossierForm"
    						property='<%= "dossierForm.adresses[" + idAdresse + "].contenuAdresse" %>'  />
    					</td>
    				</tr>
    			</logic:iterate>
    Pour récupérer la valeur envoyée dans la servlet :
    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 DossierFormValueObject extends AbstractData {
    	AdresseValueObject adresses[] = new AdresseValueObject[10];
    ...
    public DossierFormValueObject() {
    		for (int i = 0; i < 10; i++) {
    			adresses[i] = new AdresseValueObject();
    		}
    	}
    ...
    	public AdresseValueObject getAdresses(int index) {
    		return adresses[index];
    	}
     
    	public void setAdresses(int index, AdresseValueObject avo) {
    		adresses[index] = avo;
    	}
    ...
    Les 3 points à retenir (les 3 problèmes que j'ai rencontré) :
    - il faut indexer à la main la propriété en JSP
    - il faut INITIALISER une par une les sous-propriétés qui sont des beans dans le constructeur du bean
    - pour récupérer les valeurs individuellement, les getter et setter doivent définir un indice

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

Discussions similaires

  1. Sous propriété d'un bean
    Par midou159 dans le forum Struts 1
    Réponses: 1
    Dernier message: 21/06/2010, 20h00
  2. Réponses: 0
    Dernier message: 14/07/2009, 13h12
  3. Struts+JSP+erreur bean,help!
    Par moumen dans le forum Struts 1
    Réponses: 8
    Dernier message: 14/05/2007, 19h00
  4. Réponses: 2
    Dernier message: 02/03/2006, 11h34
  5. [Struts][JSP] Format avec bean:write
    Par cowa dans le forum Servlets/JSP
    Réponses: 20
    Dernier message: 19/05/2004, 18h16

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