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 :

Select multiple


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 91
    Points : 90
    Points
    90
    Par défaut Select multiple
    Salut,

    J'ai besoin d'utiliser une liste à choix multiple : <html: select multiple="true" ...

    Je cherche comment récupérer les valeurs des tous les éléments que j'ai sélectionner, en effet pour l'instant je ne récupère que le 1er.

    Merci d'avance

    Loïc




    [Modéré par Didier]
    Ajout de tag dans le titre
    Lire les règles du forum : Règles du forum Java

  2. #2
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut
    tu récupère avec une servlet ?
    ;-) cordialement

  3. #3
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    Vas voir du coté de "option" et "options" dans la taglib html
    Ton champ doit etre représenté par une collection ds ton bean.

    @+

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 33
    Points : 22
    Points
    22
    Par défaut Utilise...
    Soit un tableau.

    Soit une boucle.
    Le zen nous ramene, par notre travail sur nous-memes,
    au monde ordinaire pour devenir tout simplement des gens ordinaires.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 91
    Points : 90
    Points
    90
    Par défaut
    merci bcp

  6. #6
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut
    j'ai le même problème, mais je doit m'embrouiller dans les paramètres:
    mon Form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /** Users to associate to the project */
    private String[] usersToAdd;
     
    /** Give the usersToAdd list. */
    public String[] getUsersToAdd()  { return usersToAdd; }
     
    /** Set the users to add list. */
    public void setUsersToAdd(String[] usersToAdd) { this.usersToAdd = usersToAdd; }
     
    /** Give the full users list. */
    public Users getAllUsers() {...}
    ma jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:select property="usersToAdd" multiple="true" size="20">
    	<html:optionsCollection name="allUsers"/>
    </html:select>

  7. #7
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    L'objet Users est-il bien une collection ? De quel classe hérite-t'il ?

    Sinon, comme allUsers est une propriété de l'ActionForm, il faut remplacer l'attribut name par l'attribut property dans le tag html:optionsCollection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="usersToAdd" multiple="true" size="20">
    	<html:optionsCollection property="allUsers"/>
    </html:select>
    Modératrice Java - Struts, Servlets/JSP, ...

  8. #8
    Membre actif Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Points : 250
    Points
    250
    Par défaut
    oki merci, c'est nikel! La collection était un TreeSet.
    voici la solution avec les bonnes valeur pour les attributs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:select property="usersToAdd" multiple="true" size="20">
    	<html:optionsCollection property="allUsers" label="name" value="path"/>
    </html:select>
    avec "name" le label à afficher et "path" pour la valeur retenu pour le tableau de String.

  9. #9
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Justemement, j'allais préciser qu'il fallait obligatoirement ajouter les attributs value et label sauf si allUsers était une collection de LabelValueBean.
    Modératrice Java - Struts, Servlets/JSP, ...

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Je me permet de relancer le thread plutot que d'en créer un autre sur la récupération des selects d'une liste déroulante multichoix.

    Mon souci est que je ne parviens pas à récupérer les multi choix. J'arrive à récupérer que le premier des multichoix et ce soit sous forme d''id" soit sous forme bizarre :[Ljava.lang.String;@1cf3710

    Voici mon bout de code de ma page jsp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    				<td ROWSPAN="2"><html:select property="codeCa" multiple="true" size="4" >
    					<html:options collection="ca" labelProperty="libelle" property="id"/>
    				</html:select></td>
    Que j'essaie de récupérer dans ma page action:

    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 ActionForward executeSpecificAction(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
     
    		//Récupération des valeurs du formulaire
     
    		String CAMPAGNE = request.getParameter("codeCa");
    		System.out.print("CAMPAGNE :" + CAMPAGNE);	
     
    		BusinessService service = null;
     
        	Collection campagne = (Collection)service.getOutput(InitPortefeuilleBusinessService.OUT_CAMPAGNES);
        	// On fait un getsession() car on a besoin de récupérer des objets JAVA dans nos pages .jsp
     
    		request.getSession().setAttribute("ca", campagne);
        	// On fait un getsession() car on a besoin de récupérer des objets JAVA dans nos pages .jsp
        	request.getSession().setAttribute("dra", directiondesagences);
    		return mapping.findForward("success");
    	}
    request.getParameter me sort que le string de la première sélection de la liste déroulante multichoix et ce, il me retourne l'id et non le libelle (12:59:16,056 INFO [STDOUT] CAMPAGNE :52)
    et si je fais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		String[] CAMPAGNE = request.getParameterValues("codeCa");
    		System.out.print("CAMPAGNE :" + CAMPAGNE);
    Il me sort : 13:11:49,416 INFO [STDOUT] CAMPAGNE :[Ljava.lang.String;@1cf3710

    Merci pour vos aides.

  11. #11
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Le request.getParameterValues est bon mais pour voir le contenu d'un tableau de String via un println, il faut ajouter toString() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		String[] CAMPAGNE = request.getParameterValues("codeCa");
    		System.out.println("CAMPAGNE :" + CAMPAGNE.toString());
    Mais normalement, dans l'ActionForm, il faut définir codeCa de type String[].

    Et ensuite, dans l'Action qui s'exécute au submit du formulaire, récupérer les valeurs sélectées comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TonActionForm tonActionForm=(TonActionForm) form ;
    String[] codeCa = tonActionForm.getCodeCa() ;
    Et ensuite itérer sur le tableau de String pour récupérer chaque valeur sélectée.
    Modératrice Java - Struts, Servlets/JSP, ...

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Le request.getParameterValues est bon mais pour voir le contenu d'un tableau de String via un println, il faut ajouter toString() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		String[] CAMPAGNE = request.getParameterValues("codeCa");
    		System.out.println("CAMPAGNE :" + CAMPAGNE.toString());
    Mais normalement, dans l'ActionForm, il faut définir codeCa de type String[].

    Et ensuite, dans l'Action qui s'exécute au submit du formulaire, récupérer les valeurs sélectées comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TonActionForm tonActionForm=(TonActionForm) form ;
    String[] codeCa = tonActionForm.getCodeCa() ;
    Et ensuite itérer sur le tableau de String pour récupérer chaque valeur sélectée.
    Hmmm... Je ne sais pas trop ce qui merdouille dans mon code...
    j'ai fait ceci :


    PortefeuilleForm formulaire=(PortefeuilleForm) form ;

    String[] CAMPAGNE = request.getParameterValues("codeCa");
    System.out.print("CAMPAGNE :" + CAMPAGNE);
    Il me sort que le premier élément selectionné et sous forme de code bizarre :
    [STDOUT] CAMPAGNE :[Ljava.lang.String;@16e588e

    Et quand je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    		PortefeuilleForm formulaire=(PortefeuilleForm) form ;
    		String[] CAMPAGNE = request.getParameterValues("codeCa");
    		System.out.print("CAMPAGNE :" + CAMPAGNE.toString());
    ça merdouille à cause du toString()

    Donc je ne peux même pas mettre le reste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    		PortefeuilleForm formulaire=(PortefeuilleForm) form ;
    		String[] CAMPAGNE = request.getParameterValues("codeCa");
    		System.out.print("CAMPAGNE :" + CAMPAGNE);
     
    		for(int i=0; i < CAMPAGNE.length; i++) {
    			  System.out.println("CAMPAGNE1:" + CAMPAGNE[i]);		
    		}
    Il merdouille à cause du .length...

    Bizarre pourtant c'est comme ça que je devrais récupérer la longueur de mon tableau pour l'itération...

  13. #13
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Tu n'as pas bien regardé mon code.
    Remplace le request.getParameterValues("codeCa") par formulaire.getCodeCa() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	PortefeuilleForm formulaire=(PortefeuilleForm) form ;
    	String[] CAMPAGNE = formulaire.getCodeCa() ;
     
    	for(int i=0; i < CAMPAGNE.length; i++) {
    		  System.out.println("CAMPAGNE"+i+":" + CAMPAGNE[i]);
    	}
    Modératrice Java - Struts, Servlets/JSP, ...

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Dans ma jsp j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    				<td ROWSPAN="2"><html:select property="codeCa" multiple="true" size="4" >
    					<html:options collection="ca" labelProperty="libelle" property="id"/>
    				</html:select></td>
    dans ma page action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    		PortefeuilleForm formulaire=(PortefeuilleForm) form ;
     
    		String[] CAMPAGNE = formulaire.getCodeCa() ;
     
    		for(int i=0; i < CAMPAGNE.length; i++) {
    			  System.out.println("CAMPAGNE"+i+":" + CAMPAGNE[i]);
    		}
    Dans ma page form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	private String[] codeCa;
     
    	public String[] getCodeCa() {
    		return codeCa;
    	}
     
    	public void setCodeCa(String[] codeCa) {
    		this.codeCa = codeCa;
    	}
    Je sais pas.. J'ai l'impression que c'est le length qu'il n'apprécie pas...

  15. #15
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Dans l'ActionForm, ajoute la méthode reset et initialise le tableau de String comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void reset(ActionMapping mapping, HttpServletRequest request)
    {
       this.codeCa=new String[0] ;
    }
    Modératrice Java - Struts, Servlets/JSP, ...

  16. #16
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    T'es un amour c_nvy !!
    il me retourne bien cette fois ci les selects mais en ID mais bon, pour ça je vais changer le property="id" en property=LabelProperty je sais que ça va marcher je l'ai testé.

    Je retesterais ça lundi, bon week end à toi !

    ça marche ! Merci bien

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour tout le monde,

    Je déterre le sujet car j'ai le même problème que nos amis ci-dessus : je n'arrive à récupérer dans mon action Struts que le premier élément sélectionné

    J'ai lu ce qui était fait plus haut, j'en ai tenu compte et voici mon code actuel :

    Dans la JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:select property="tableauProduits" multiple="true" size="3" tabindex="7" >
     <html:optionsCollection property="listeProduits" label="libelle" value="code" />
    </html:select>
    Dans le form bean, où ProduitsListeOption est une enum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private String[] tableauProduits;
    private List<ProduitsListeOption> listeProduits;
     
    public String[] getTableauProduits() {return tableauProduits;}
    public void setTableauProduits(String[] tableauProduits) {this.tableauProduits = tableauProduits;}
     
    public List<ProduitsListeOption> getListeProduits() {return listeProduits;}
    public void setListeProduits(List<ProduitsListeOption> listeProduits) {this.listeProduits = listeProduits;}
     
    public void reset(ActionMapping mapping, HttpServletRequest request) {
     this.tableauProduits = new String[0];
    }
    Dans l'action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CircularisationForm circulForm = (CircularisationForm) form;
    String[] tableauProduits = circulForm.getTableauProduits();
    Dans le struts-config.xml, le scope de l'action est bien à request.

    Si quelqu'un veut bien me donner son avis sur ce qui ne va pas dans mon code, je suis preneur

  18. #18
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Je pense que ton problème vient du fait que tu n'as pas fixé la taille du tableau de String tableauProduits.

    Donc, soit cette taille est toujours fixe et dans ce cas, tu la définis dans l'ActionForm.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private String[] tableauProduits=new String[10];
    Soit tu l'initialises dans l'Action qui initialise la List listeProduits comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CircularisationForm circulForm = (CircularisationForm) form;
    circulForm.setTableauProduits(new String[listeProduits.size()]);
    Dans ce cas, le scope du form-bean doit être égal à session dans le mapping de l'Action qui initialise la List listeProduits ainsi que dans celui de l'Action qui s'exécute au submit du formulaire.
    Modératrice Java - Struts, Servlets/JSP, ...

  19. #19
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse
    J'ai testé la deuxième possibilité (fixer la taille du tableau dans l'action de préaffichage de la page de recherche + passer au scope session dans les action mappings d'affichage initial et de soumission du formulaire), mais ça ne marche toujours pas.

    J'ai oublié de préciser que le formulaire n'est pas soumis "directement", c'est fait par un appel Ajax synchrone avec une transformation XSL
    C'est important? J'imagine que oui (j'ai progressé dans mes investigations dans le code depuis mon post).

    Je vais être bon pour traiter ce select multiple en Javascript avant le xhr.open(), je le sens...

  20. #20
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Citation Envoyé par VegitoDeGwada Voir le message
    J'ai testé la deuxième possibilité (fixer la taille du tableau dans l'action de préaffichage de la page de recherche + passer au scope session dans les action mappings d'affichage initial et de soumission du formulaire), mais ça ne marche toujours pas.
    Les deux actions sont bien liées au même form-bean CircularisationForm ?

    J'ai oublié de préciser que le formulaire n'est pas soumis "directement", c'est fait par un appel Ajax synchrone avec une transformation XSL
    C'est important? J'imagine que oui (j'ai progressé dans mes investigations dans le code depuis mon post).

    Je vais être bon pour traiter ce select multiple en Javascript avant le xhr.open(), je le sens...
    Je n'ai jamais utilisé Ajax.
    Si le problème vient de là, je ne vais malheureusement pas pouvoir t'aider.

    Tu devrais ouvrir un nouveau post car celui-ci ayant le tag Résolu, tu as peu de chance que d'autres te viennent en aide.
    Modératrice Java - Struts, Servlets/JSP, ...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/01/2005, 15h19
  2. select multiple sur plusieurs tables
    Par syl2095 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/12/2004, 15h48
  3. [VB6] sélection multiple de colonne dans excel grâce à VB
    Par biquet dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/08/2004, 12h44
  4. <select multiple ...>
    Par ayobo dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 08h49
  5. [C#]Sauvegarde d'une selection multiple d'une listbox?
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 29/04/2004, 17h16

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