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 2 Java Discussion :

double select rempli dans l'Action


Sujet :

Struts 2 Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 100
    Points
    100
    Par défaut double select rempli dans l'Action
    Bonjour,

    Je rencontre un soucis quand je souhaite utiliser le TAG Double Select de Struts 2. En effet quand je construit directement mes listes au sein de la JSP aucun soucis il fonctionne très bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <s:doubleselect label="Select Item"  
              headerValue="--- Please Select ---"
              headerKey="1" list="{'Color','Fruits'}" 
              doubleName="dishes" 
              doubleList="top == 'Color' ? {'Black','Green','White',
              'Yellow','Red','Pink'} : { 'Apple','Banana','Grapes','Mango'}" />
    Néanmoins quand je souhaite initialiser ces listes au sein de l'action préalable à l'affichage de la JSP, impossible d'accéder à la 2ieme liste de sélection... J'ai essayé plusieurs pistes et rien n'y fait. Or je ne trouve nulle part d'exemple concernant cette fonctionnalité.

    Certains d'entre vous ont-ils réussi à utiliser un DoubleSelect initialisé dans l'Action ?

    D'avance merci de votre aide.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 30
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Peux tu donner le code que tu utilises dans ton action pour initialiser les listes ?
    Difficile de t'aider sans.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 100
    Points
    100
    Par défaut
    Merci LukasP. mais je viens de résoudre mon problème toute seule

    Donc voila ce que j'ai mis en place :

    Dans ma structure j'ai des directions, chacune des directions comporte 1..n services. Qui sont donc représenté par 2 objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Direction {
    	private int id_direction;
    	private String libelle_direction;
    	private List<Service> listService;
     
    	// ... + les fonctions get et set qui vont bien ainsi que les constructeurs
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Service{
    	private int id_service;
    	private String libelle_service;
     
    	// ... + les fonctions get et set qui vont bien ainsi que les constructeurs
    }
    Dans mon Action j'ai donc initialisé :

    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
     
    public class MonAction extends ActionSupport implements Preparable {
     
    	// ma liste de directions
    	ArrayList<Direction> listDirection = null; 
     
    	// identifiant récupéré de la direction sélectionnée
    	private int id_direction_selected = 0;
    	// identifiant récupéré du service sélectionné
    	private int id_service_selected = 0;
     
    	public void prepare() throws Exception {
    		// initialise la liste à remplir
    		listDirection = new ArrayList<Direction>();
     
    		// creation de la 1iere Direction
    		Direction direction0 = new Direction(0, "DSI");
    		// création de la liste des services de la 1iere direction 
    		ArrayList<Service> listService0 = new ArrayList<Service>();
    		listService0.add(new Service(0, "Réseaux"));
    		listService0.add(new Service(1, "Support"));
    		listService0.add(new Service(2, "Ingénierie"));
    		// agglomération des éléments
    		direction0.setListService(listService0);
    		listDirection.add(direction0);
     
    		// creation de la 2ièmeDirection
    		Direction direction1 = new Direction(1, "Direction des ventes");
    		// création de la liste des services de la 2ièmedirection 
    		ArrayList<Service> listService1 = new ArrayList<Service>();
    		listService1.add(new Service(3, "Marketing"));
    		listService1.add(new Service(4, "Vente directe"));
    		// agglomération des éléments
    		direction1.setListService(listService1);
    		listDirection.add(direction1);
     
    		// etc... concrètement dans mon projet ces informations remontent d'une requête en base de données
    	}
    }
    Et du coté de ma JSP j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <s:form action="doAdd" method="POST">
    	<s:doubleselect label="Direction / Service"
    		name="id_direction_selected"	doubleName="id_service_selected"
    		list="listDirection"		doubleList="listService"
    		listKey="id_direction"		doubleListKey="id_service"
    		listValue="libelle_direction"	doubleListValue="libelle_service"
    		value="defaultItem"		doubleValue="doubleDefaultItem" />
     
    </s:form>
    et ensuite dans l'Action je récupère id_direction_selected et id_service_selected.

    En espérant que cela puisse servir à d'autres !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Points : 8
    Points
    8
    Par défaut Besoin d'aide pour faire la même chose que vous
    Bonjour,

    je souhaiterai faire comme vous, utiliser un doubleselect de struts et le remplir dans une class Action. La première liste se remplit bien de RSA, et ECDSA mais la deuxième reste vide malgré la présence de la classe getListKeySize() dans la classe DigestAlgo()
    J'ai bien créé comme vous le dîtes deux classes
    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
    40
    public class KeySize {
     
        /**
         * taille de la cle.
         *
         */
        private final int code;
     
        /**
         * taille de la cle.
         *
         */
        private final String labelKeySize;
     
        /**
         * constructor with intialization of the code.
         * @param initialCode keysize
         *
         */
        public KeySize(final int initialCode) {
            this.code = initialCode;
            this.labelKeySize = Integer.toString(this.code) + " bits";
        }
     
        /**
         * retrieve the code.
         * @return Code
         */
        public final int getCode() {
            return code;
        }
     
        /**
         * returns the string for the key size.
         * @return String key size label
         */
        public final String getLabelKeySize() {
            return this.labelKeySize;
        }
    }
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    public final class DigestAlgo {
     
        /**
         * algorithm code.
         *
         */
        private final int code;
     
        /**
         * algorithm string.
         */
        private final String labelAlgorithm;
     
        /**
         * list of KeySize for the algorithm.
         */
        private final KeySize[] listKeySize;
     
        /**
         * Constructor of the algorithm and its list of keysizes.
         * @param c int code
         * @param s string of the algorithm
         * @param l list of keysizes
         */
        public DigestAlgo(final int c, final String s, final KeySize[] l) {
            this.code = c;
            this.labelAlgorithm = s;
            this.listKeySize = l;
        }
     
        /**
         * access to the code.
         * @return int code
         */
        public int getCode() {
            return this.code;
        }
     
        /**
         * access to the label.
         * @return String label
         */
        public String getLabelAlgorithm() {
            return this.labelAlgorithm;
        }
     
        /**
         * @return array of keySize.
         */
        public KeySize[] getListKeySize() {
            return this.listKeySize;
        }
    }
    Je crée les instances dans une class static
    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 final class Algorithm {
        /**
         * private list of digestAlgo.
         */
        public static final DigestAlgo[] LISTDIGESTALGORITHM;
     
        /**
         * Constructor of the list of algorithms available.
         */
        static {
            LISTDIGESTALGORITHM = new DigestAlgo[2];
            //RSA
            KeySize[] rsa = new KeySize[2];
            rsa[0] = new KeySize(2048);
            rsa[1] = new KeySize(4096);
            LISTDIGESTALGORITHM[0] = new DigestAlgo(0, "RSA", rsa);
            //ECDSA
            KeySize[] ecdsa = new KeySize[3];
            ecdsa[0] = new KeySize(256);
            ecdsa[1] = new KeySize(384);
            ecdsa[2] = new KeySize(521);
            LISTDIGESTALGORITHM[1] = new DigestAlgo(1, "ECDSA", ecdsa);
        }
     
        /**
         * This constructor is private to avoid any instantiation of this class as it is a utility class.
         * (there is no dynamic fields inside)
         *
         * As a matter of fact, this class can only be used in a static way as a library.
         */
        private Algorithm() {
        }
    }
    Dans le jsp, j'ai mis ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	<s:doubleselect cssStyle="width: 200px" doubleCssStyle="width: 200px"
    	      name="algo"                       doubleName="paramGen"
    	      list="listdigestAlgorithm"        doubleList="listKeySize"
    	      listKey="code"                    doubleListKey="code"
    	      listValue="labelAlgorithm"        doubleListValue="labelKeySize" />
    Dans mon action.java, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        /**
         * return Enumeration Algorithm.
         * @return value of Algorithm.
         */
        public DigestAlgo[] getListdigestAlgorithm() {
            return Algorithm.LISTDIGESTALGORITHM;
        }
    En vous remerciant de l'aide que vous pourriez m'apporter, car celà fait tout l'après-midi que je cherche.
    Julien

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Points : 8
    Points
    8
    Par défaut Ma solution
    Je pense que cela vient de la version de struts 2 que j'utilise, j'ai donc décidé de garder deux select, en plus cela me permet de mettre un label pour chaque, ce que le tag doubleselect ne permet pas.
    Je suis reparti du code de doubleselect.ftl, et l'ai modifié un peu, et là ça marche:
    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
    40
    41
    42
    43
    44
     
    <label>
       <s:text name="Algorithme"/>
    </label>
    <s:select cssStyle="width: 200px" name="algo" list="listdigestAlgorithm" 
    	     listKey="code"               listValue="labelAlgorithm"  
    	   onchange="redirect(this.options.selectedIndex)"/><br />
    <label>
       <s:text name="Paramètres"/>
    </label>
    <s:select cssStyle="width: 200px" name="param" list="listKeySize" 
                  listKey="code" listValue="labelkeySize" />
     
    <script>
     
    var groups=document.requestServerCertificateConfform.algo.options.length
    var group=new Array(groups)
    for (i=0; i<groups; i++)
    group[i]=new Array()
    var itemCount = 0 
    <s:iterator value="listdigestAlgorithm" status="algo">
       var doubleItemCount = 0
       <s:iterator value="listkeySize">
          <s:set name="doubleItemKey" value="code"/>
          <s:set name="doubleLabelKey" value="labelkeySize"/>
          group[itemCount][doubleItemCount] = new Option("${doubleLabelKey}",${doubleItemKey});
          doubleItemCount = doubleItemCount + 1 
       </s:iterator>
       itemCount = itemCount + 1 
    </s:iterator>
     
     
    var temp=document.requestServerCertificateConfform.param
     
    function redirect(x){
       for (m=temp.options.length-1;m>0;m--)
          temp.options[m]=null
       for (i=0;i<group[x].length;i++){
          temp.options[i]=new Option(group[x][i].text,group[x][i].value)
       }
       temp.options[0].selected=true
    }
     
    </script>
    Et avec ce code, il va bien chercher listkeySize de la classe DigestAlgo, voir le message précédent pour le code des classes. J'ai simplement ajouté un autre listkeySize dans l'action, qui retourne la liste par défaut.

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

Discussions similaires

  1. Double-Select dans Update
    Par mactwist69 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/12/2009, 15h39
  2. [MySQL] Select double et insertion dans fichier
    Par Anakior dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/01/2006, 16h11
  3. Réponses: 3
    Dernier message: 30/07/2004, 11h51
  4. [JSP] [STRUTS] Switch dans une action
    Par babylone7 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 28/07/2004, 16h21
  5. Selection aléatoire dans une fouchette de 10%
    Par RobertDeNiroZ dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/06/2004, 10h22

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