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 :

permutation valeurs deux select multiple


Sujet :

Struts 1 Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut permutation valeurs deux select multiple
    bonjour.
    voilà j'ai un problème sur la permutation des valeurs de deux listes (html:select).

    je dispose de deux listes à choix multiples, et moyennant deux boutons je voudrais faire passer les valeurs selectionnées d'une des listes vers l'autre (dans les deux sens selon le bouton), puis le tout est transmis à une action struts.

    Code javascript pour la permutation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function deplacer(l1,l2) {
       if (l1.options.selectedIndex>=0) {
    	for (var i=0;i<l1.options.length;i++) {
    	   if (l1.options[i].selected) {
    	       o=new Option(l1.options[i].text,l1.options[i].value);
    	       l2.options[l2.options.length]=o;
    	       l1.options[i]=null;						}
            }
         } else
              alert("Aucun droit sélectionné");       
      }
    partie du code de la page:

    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
     
    <font size="2"><strong>Liste 1</strong></font>
            <html:select property="id_tache_g" size="10" multiple="true" tyleClass="largeurListes">
                 <html:options collection="vect1" property="id_tache" labelProperty="libelle"/></html:select></td>
     
    <td>
    <input type="button" value="Attribuer >>" onclick="Deplacer(this.form.id_tache_g,this.form.id_tache_d)" >
    <input type="button" value="&lt;&lt; Retirer" onclick="Deplacer(this.form.id_tache_d,this.form.id_tache_g)">
    </td>				
    <td><font size="2"><strong>Liste 2</strong></font>
    <div align="center">
     
            <html:select property="id_tache_d" size="10" multiple="true" styleClass="largeurListes">
                <html:options collection="vect2" property="id_tache" labelProperty="libelle"/>
              </html:select></div></td>
    le soucis c'est qu'à la recupération dans l'action, parfois ça marche bien, et parfois j'obtiens des valeurs redondantes dans les deux listes, ce qui ne devrait pas se produire (l1.options[i]=null

    un coup de pouce me rendrait vraiment service car j'ai épuisé toutes mes batteries.

    Merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour si ca peut t'interesser, j'ai fait un pti composant qui gere le swap entre deux listes select.
    Tu peux toruver une demo sur
    http://jscontrolstags.sourceforge.ne...swap/swap.html

    Il est base sur scripatculous, du coup tu peux faire du drag/drop d'une liste a une autre.

    Angelo

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    slt!
    très complet comme composant (je donne suite).
    celà dit, un ptit indice sur ce qui cloche dans mon code ne me serait pas inutile. D'autant plus que hors mis le problème de la redondance des valeurs dans les listes, le passage de plusieurs valeurs selectionnées ne se fait pas (il ne fait passer que la premiere valeur selectionnée malgré le multiple="true" dans la balise html:select, et le for (var i=0;i<l1.options.length;i++) dans le script).

    ça me parait louche comme comportement.
    merci encore.

  4. #4
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Pour que les items d'un select multiple soit poste, il faut que ceux ci soit selectionne (d'apres mes souvenirs)

    Essaie de faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function deplacer(l1,l2) {
       if (l1.options.selectedIndex>=0) {
    	for (var i=0;i<l1.options.length;i++) {
    	   if (l1.options[i].selected) {
    	       o=new Option(l1.options[i].text,l1.options[i].value);
    	       l2.options[l2.options.length]=o;
                   // Selection d'un item
                   o.selected="selected";
    	       l1.options[i]=null;						}
            }
         } else
              alert("Aucun droit sélectionné");       
      }

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    j'ai oublié de preciser que j'ai un script supplémentaire qui fait la selection de tous les elements une fois que l'utilisateur valide le formulaire. De cette façon il peut effectuer autant de permutation qu'il souhaite, et ce n'est qu'à la validation que tous les elements sont selectionnés pour être transmis à l'action.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	function selectionnerElementsListes(l1,l2) {
    		for(var i=0;i<l1.options.length;i++) {
    			l1.options[i].selected = true;
    		}
     
    		for(var j=0;j<l2.options.length;j++) {
    			l2.options[j].selected = true;
    		}
    	}
    Donc le soucis n'est pas la selection, mais l'appartition de doublons dans les listes. J'explique plus clairement:

    j'ai mes deux listes: l1= {x1,x2} et l2={y1,y2,y3}
    lorsque je fais passer y1 vers l1, au niveau de l'interface je vois bien le passage (y1 apparait dans l1 et disparait dans l2)
    par contre, à la validation j'obtiens au niveau de l'action parfois l1={x1,x2,y1} et l2 = {y2,y3} (qui est correct) et parfois l1={x1,x2,y1} et l2 = {y1,y2,y3} (y1 se repete dans les deux listes!!!! ça cloche!!)

    au passage, je precise que je recupere mes deux listes à l'aide de deux tableaux String[].

    merci.

  6. #6
    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
    Comme je ne voyais rien d'anormal dans ton code, j'ai fait un test en utilisant ton code javascript et ça fonctionne à merveille.

    Peux-tu montrer le code de récupération des tableaux de String id_tache_g et id_tache_d ?

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    j'ai ceci dans mon actionForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    public class TacheForm extends ActionForm {
    	private String[] id_tache_g;
    	private String[] id_tache_d;
     
    // + les methodes get et set
     
    }
    dans l'action je recupere le contenu des listes comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    TacheForm tch = (TacheForm) form;
    tch.getId_tache_d()
    tch.getId_tache_g()
    C'est assez classique comme code, et ce qui me tracasse c'est que des fois ça marche des fois non (redondance de valeurs).

    voyez par exemple le scénario suivant :

    liste1={x1,x2,x3} ,liste2={y1,y2}
    je fais passer x1 et x2 dans liste2, je valide le formulaire, et dans l'action j'obtions Id_tache_g=[x3], Id_tache_d=[y1,y2,x1,x2] c parfait jusque là.
    je fais des traitements avec les resultats, entre autres une insertion dans une base de données.
    je reaffiche ensuite ma page (je fais remarquer qu' au chargement les elements sont recuperés d'un vecteur, lui même rempli à partir de la base de données). J'obtions donc à l'ecran les deux listes correctement (liste1={x3}, liste2={y1,y2,x1,x2} )

    J'enleve ensuite x1, et x2 de liste2 pour les ramener dans liste1. et là surprise!!
    dans l'action j'obtiens Id_tache_g=[x1,x2,x3], et Id_tache_d[y1,y2,x1,x2]

    et pourtant, si j'enleve par exemple seulement x1 de liste 2 et je garde x2, j'obtiens les bonnes valeurs (Id_tache_g=[x1,x3], et Id_tache_d[y1,y2,x2])

    et comme c_nvy vient de le dire, y'a rien à priori qui cloche dans le code, et pourtant....!!!!

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    slt!
    scriptaculous marche à merveille avec les balises "select" et des valeurs statiques, mais dès que je remplace "select" par "html:select" avec un remplissage dynamique des listes, plus rien ne fonctionne.
    Du coup, je suis de retour à la case départ.

    Je pense que l'instruction
    n'a pas du tout l'effet attendu, c'est à dire la suppression effective de l'element dans la liste. Et au rechargement de la page, les elements qui etaient mis à null se retrouve dans la liste (n'apparaissent pas bien sûr mais conserve qd même leurs valeurs en arrière plan.

    Et comme à la validation je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(var i=0;i<l1.options.length;i++) {
        l1.options[i].selected = true;
     }
    je me retrouve donc avec les valeurs qui sont censées être null!!!

    La raison qui m'a amené à cette hypothèse c'est que lorsque j'enleve la boucle precedente, et que je selectionne manuellement les elements qui apparaissent dans mes deux listes, je n'obtiens que les valeurs selectionnées (mais vous conviendrez avec moi que c'est pas pratique pour l'utilisateur)

    Quelqu'un pourrait-il m'eclaircir d'avantage, car je ne dispose d'aucune information pour étayer cette hypothèse???

    merci.

  9. #9
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour nadines,
    je t'ai repondu, mais je vais redire ce que je t'ai dot pour que tout le monde en profite.

    L'utilisation de html:select avec des html:option genere un select html avec des options html, le probleme ne vient pas du fait d'utiliser struts. Il faudrait que tu verifies le html que struts te genere (en gros tu compares le html que struts te genere et le html que tu veux avoir pour que ca marche).

    Angelo

  10. #10
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    J'ai une autre fonction en php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function affichepreviews($filename){
     
     
    }
    et dans cette fonction j'ai besoin de récupérer la liste des éllemnts passées dans le 2eme liste
    jai besoin de leur id et que ca soit le meme quil adéja dans le 1er list parce que jen ai besoin pour un des traitements

Discussions similaires

  1. Envoi de valeur à un select multiple
    Par Kreepz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/12/2014, 12h11
  2. récupérer valeur listbox selection multiple
    Par titou624 dans le forum C#
    Réponses: 9
    Dernier message: 18/05/2010, 09h09
  3. [JSP] Récupérer les valeurs d'un SELECT multiple
    Par ran_hery dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 15/05/2006, 15h56
  4. Récupérer les valeurs d'un <select> multiple
    Par vg33 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/10/2005, 11h38
  5. récupérer toutes les valeurs choisies ds un select multiple
    Par toome dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/10/2005, 13h45

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