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] Valeur défaut select répété plusieurs fois


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 50
    Points : 36
    Points
    36
    Par défaut [Struts] Valeur défaut select répété plusieurs fois
    Bonjour,

    Le point que je vais aborder est à mons avis une problématique courante dans des applications web.
    J'ai une liste déroulante (html:select) dans un logic:iterate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <logic:notEmpty name="contratAdherent" property="lesBeneficiaire">
    <logic:iterate name="contratAdherent" property="lesBeneficiaire" id="beneficiaire" indexId="cptBeneficiaire">
      <tr height="20"> 
        <td class="detail_vert" align="left">
          <html:select property="codeMouvement">
            <html:option value="A">Annulation</html:option>
            <html:option value="C">Création</html:option>
          </html:select>
        </td>
      </tr>
    </logic:iterate>
    </logic:notEmpty>
    Les select ont donc tous le même nom.
    Résultat HTML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <select name="codeMouvement">
      <option value="A" selected="selected">Annulation</option>
      <option value="C" selected="selected">Création</option>
    </select>
    Déclaration du formulaire dans le struts-config.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <form-bean name="creerMouvementForm" type="fr.enfamille.cetelic.form.CreerMouvementForm">
      <!-- le code mouvement -->
      <form-property name="codeMouvement" type="java.lang.String[]" />
    </form-bean>
    Je souhaite donner une valeur par défaut à chaque liste, mais je ne veux pas que ce soit forcément la même valeur pour chacune d'entre elles.
    Exemple:
    j'aimerais initialiser la prémière liste à "Création" et la seconde à "Annulation".

    Je tente les codes suivants dans mon Action, mais en vain:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CreerMouvementForm formulaire = (CreerMouvementForm) form;	
    formulaire.set("codeMouvement", 0, "C");
    formulaire.set("codeMouvement", 1, "A");
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String[] tableau = {"C", "A"};
    formulaire.set("codeMouvement", tableau);
    Cela ne marche pas...

    Quand je mets "A" partout, il met bien "Annulation" pour les deux listes,
    mais si je mets au moins un "C" à une des listes, toutes les listes ont la valeur "Création" par défaut. J'ai noté que c'est parceque l'option "Création" est la dernière.

    Si j'inverse les positions des 2 options, et que je mets "A" en valeur par défaut pour au moins une des listes, toutes les listes ont "Annulation" en valeur par défaut.


    Quelqu'un a une idée ?

  2. #2
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Points : 174
    Points
    174
    Par défaut
    En utilisant une HashMap avec comme clé le code mouvement dans le form tu ne t'en sortirais pas ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 50
    Points : 36
    Points
    36
    Par défaut
    Je vais tester, merci.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 50
    Points : 36
    Points
    36
    Par défaut
    J'arrive pas à trouver une manière de rentrer une HashMap.
    Je pense pas que ce soit ça :s

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 116
    Points : 128
    Points
    128
    Par défaut
    Ton probleme vient du fait que tes select pointe sur la meme propriéte, donc si tu en modifie un tu les modifie tous. De plus il ne doit enregistrer qu'une valeur. Il faut bien utliser une HashMap dans ton formulaire.
    <html:select property="myHashMap(idClient)">
    ...
    Sinon ca ne amrchera jamais

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 50
    Points : 36
    Points
    36
    Par défaut
    Merci, je vais creuser ça, je vous dirai si ça va mieux.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 116
    Points : 128
    Points
    128
    Par défaut
    Voici un bout de code utilisant les Map. Par contre j'utilise JSTL et les EL.
    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
     
    <c:forEach var="i" begin="0" end="9">
    			<p>
    				<span class="label" ><bean:message key="object.method" />*</span>
    				<html:select property="parameter(${CALL[i]})">
    						<html:option value="">------</html:option>
    						<c:forEach items="${WSmethods}" var="method" >
    							<html:option value="${method.value.name}">${method.value.labels[locale]}</html:option>
    						</c:forEach>
    					</html:select>
    				&nbsp;<html:errors property="${CALL[i]}" />
    			</p>
    			<p><span class="label" ><bean:message key="object.argument" /></span><html:text property="parameter(${ARG[i]})" styleClass="saisie" size="50"/><html:errors property="${ARG[i]}" /></p>
    			<p><span class="label" ><bean:message key="object.thresholdMax" /></span><html:text property="parameter(${MIN[i]})" styleClass="saisie" size="50"/><html:errors property="${MIN[i]}" /></p>
    			<p><span class="label" ><bean:message key="object.thresholdMin" /></span><html:text property="parameter(${MAX[i]})" styleClass="saisie" size="50"/><html:errors property="${MAX[i]}" /></p>
    		</c:forEach>
    Et Dans mon formulaire j'ai un champ comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    protected Map parameter  = new HashMap();
    public void setParameterMap(Map parameter){
            this.parameter = parameter;
        }
     
    public Map getParameterMap(){
            return parameter;
    }
    Utilsé une Map n'est pas forcement tres propre mais dans ton cas tu es obligé.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 50
    Points : 36
    Points
    36
    Par défaut
    J'ai résolu mon problème d'une autre manière et qui je pense, est plus propre (dites moi si je me trompe).


    Ma solution est de faire correspondre le nom du property du html:select avec le nom du property de l'option
    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:notEmpty name="listeEnvoiMouvement" >
    						<logic:iterate name="listeEnvoiMouvement" id="envoiMouvement" indexId="cptEnvoiMouvement">
    						<tr height="20"> 
    							<td class="detail_vert" align="center"><bean:write name="envoiMouvement" property="bene" /></td>							
    							<td class="detail_vert" align="left">
    								<html:select name="envoiMouvement" property="codeTypeMouvement">
    									<html:options collection="listeTypeMouvement" property="codeTypeMouvement" labelProperty="libTypeMouvement" />
    								</html:select>
    							</td>							 
    							<td class="detail_vert" align="center" width="11%">
    								<html:select name="envoiMouvement" property="organismeGestionnaire.codeOrganismeGestionnaire">
    									<html:options collection="listeOrganismeGestionnaire" property="codeOrganismeGestionnaire" labelProperty="libelle" />
    								</html:select>
    							</td>							
    							<td class="detail_vert" align="center" width="4%">
    								<html:select name="envoiMouvement" property="codeTypeContrat">
    									<html:options collection="listeTypeContrat" property="codeTypeContrat" labelProperty="codeTypeContrat" />
    								</html:select>
    							</td>							
    							<td class="detail_vert" align="left">
    								<html:select name="envoiMouvement" property="numSecu">
    									<html:options collection="listeNumSecu" property="numSecu" labelProperty="numSecuStr" />
    								</html:select>
    							</td>							
    							<td class="detail_vert_rouge" align="center">
    								<html:select property="dateFin">
    									<html:option value="dateFin"/>
    								</html:select>
    							</td>	
    							<td class="detail_vert" align="center"><input type="checkbox" name="doitEnvoyerMouvement" value="<bean:write name="envoiMouvement" property="bene" />"></td>							
    						</tr>
    						</logic:iterate>
    						</logic:notEmpty>
    La liste sur laquelle j'itère doit donc contenir des beans qui ont une méthode d'accés de même nom à celles des méthodes d'accés aux valeurs des paramètres de mes select.
    Je me doute que je suis pas super clair là...

    Je fais un exemple plus clair dans qques minutes, puis je mets des mots clés pour la recherche de la solution et je mets la balise résolu.
    A tout de suite ^^

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 50
    Points : 36
    Points
    36
    Par défaut
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <table>
    	<tr height="20"> 
    		<td>Nom</td>							
    		<td>Prénom</td>							
    		<td>Pays</td>							 
    	</tr>
    	<logic:notEmpty name="listePersonne" >
    	<logic:iterate name="listePersonne" id="personne" indexId="cptPersonne">
    	<tr> 
    		<td>
    			<bean:write name="personne" property="nom" />
    		</td>							
    		<td>
    			<bean:write name="personne" property="prenom" />
    		</td>							
    		<td>
    			<html:select name="personne" property="idPays">
    				<html:options collection="listePays" property="idPays" labelProperty="libPays" />
    			</html:select>
    		</td>							 
    	</tr>
    	</logic:iterate>
    	</logic:notEmpty>
    <table>
    La classe Pays:
    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
    public class Pays implements Serializable {
     
    	private Integer idPays;
    	private String	libPays;
     
     
    	public Pays(Integer idPays, String libPays) {
    		this.idPays = idPays;
    		this.libPays = libPays;
    	}
     
    	public Integer getIdPays() {
    		return idPays;
    	}
    	public void setIdPays(Integer idPays) {
    		this.idPays = idPays;
    	}
    	public String getLibPays() {
    		return libPays;
    	}
    	public void setLibPays(String libPays) {
    		this.libPays = libPays;
    	}
     
    }
    La classe Personne:
    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
    public class Personne implements Serializable {
     
    	private Integer idPersonne;
    	private String	nom;
    	private String	prenom;
     
     
    	public Personne(Integer idPersonne, String nom, String prenom) {
    		this.idPersonne = idPersonne;
    		this.nom = nom;
    		this.prenom = prenom;
    	}
     
    	public Integer getIdPersonne() {
    		return this.idPersonne;
    	}
    	public void setIdPersonne(Integer idPersonne) {
    		this.idPersonne = idPersonne;
    	}
    	public String getNom() {
    		return this.nom;
    	}
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
    	public String getPrenom() {
    		return this.prenom;
    	}
    	public void setPrenom(String prenom) {
    		this.prenom = prenom;
    	}
     
    }

    Mot clés pour la recherche:
    formulaire struts
    saisie multiple
    plusieurs fois
    valeur par défaut
    initialisation

  10. #10
    Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci infiniment la solution dont j'ai besoin


    Citation Envoyé par Gildas Huart Voir le message
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <table>
    	<tr height="20"> 
    		<td>Nom</td>							
    		<td>Prénom</td>							
    		<td>Pays</td>							 
    	</tr>
    	<logic:notEmpty name="listePersonne" >
    	<logic:iterate name="listePersonne" id="personne" indexId="cptPersonne">
    	<tr> 
    		<td>
    			<bean:write name="personne" property="nom" />
    		</td>							
    		<td>
    			<bean:write name="personne" property="prenom" />
    		</td>							
    		<td>
    			<html:select name="personne" property="idPays">
    				<html:options collection="listePays" property="idPays" labelProperty="libPays" />
    			</html:select>
    		</td>							 
    	</tr>
    	</logic:iterate>
    	</logic:notEmpty>
    <table>
    La classe Pays:
    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
    public class Pays implements Serializable {
     
    	private Integer idPays;
    	private String	libPays;
     
     
    	public Pays(Integer idPays, String libPays) {
    		this.idPays = idPays;
    		this.libPays = libPays;
    	}
     
    	public Integer getIdPays() {
    		return idPays;
    	}
    	public void setIdPays(Integer idPays) {
    		this.idPays = idPays;
    	}
    	public String getLibPays() {
    		return libPays;
    	}
    	public void setLibPays(String libPays) {
    		this.libPays = libPays;
    	}
     
    }
    La classe Personne:
    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
    public class Personne implements Serializable {
     
    	private Integer idPersonne;
    	private String	nom;
    	private String	prenom;
     
     
    	public Personne(Integer idPersonne, String nom, String prenom) {
    		this.idPersonne = idPersonne;
    		this.nom = nom;
    		this.prenom = prenom;
    	}
     
    	public Integer getIdPersonne() {
    		return this.idPersonne;
    	}
    	public void setIdPersonne(Integer idPersonne) {
    		this.idPersonne = idPersonne;
    	}
    	public String getNom() {
    		return this.nom;
    	}
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
    	public String getPrenom() {
    		return this.prenom;
    	}
    	public void setPrenom(String prenom) {
    		this.prenom = prenom;
    	}
     
    }

    Mot clés pour la recherche:
    formulaire struts
    saisie multiple
    plusieurs fois
    valeur par défaut
    initialisation

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/07/2011, 09h52
  2. Traitements répétés plusieurs fois
    Par mohamida dans le forum JSF
    Réponses: 1
    Dernier message: 27/05/2010, 10h34
  3. OnMouseOver sur div répété plusieurs fois
    Par Khleo dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 30/10/2009, 10h07
  4. fonction répété plusieurs fois
    Par eiffel74 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/08/2009, 01h19
  5. tableau croisé répété plusieurs fois
    Par Juliana dans le forum iReport
    Réponses: 2
    Dernier message: 07/01/2009, 17h01

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