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-Layout] Récupérer les valeurs de la deuxième collection d'un layout:swap


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut [Struts-Layout] Récupérer les valeurs de la deuxième collection d'un layout:swap
    Bonsoir,
    J'aimerais savoir comment récupérer les infos de la deuxième liste de mon layout:swap.

    Ma première liste est bien remplie et la deuxiéme est vide :
    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
     
    MaClasseCommande cmd= new MaClasseCommande();
     
    ListeFonc listeFonc = new ListeFonc();
     
    Vector listFoncInitial = new Vector();
     
    ArrayList list1 = new ArrayList();
    ArrayList list2 = new ArrayList();
     
    // récupérer la liste des fonctionnalités
    listeFonc = cmd.getListeFonctionnalites();
     
    listFoncInitial = listeFonc.getListFoncInitial();
     
    for (int i = 0; i < listFoncInitial.size(); i++) {
       FonctionnalitesVO foncvo = new FonctionnalitesVO();
       foncvo = (FonctionnalitesVO) listFoncInitial.get(i);
       list1.add(foncvo);
    }
     
    request.setAttribute("list1", list1);
    request.setAttribute("list2", list2);
    Maintenant aprés avoir pris des éléments de list1 vers list2, je veux récupérer les éléments de list2
    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
     
     
    //La classe des commandes
    MaClasseCommande cmd= new MaClasseCommande();
    //Le Form Bean
    RcGroupefonctionFB fb= (RcGroupefonctionFB) form;
     
    //Le VO
    GroupefonctionVO vo= new GroupefonctionVO();
     
    //La page de forward
    String page = "saisieRcGroupefonction";
    String[] list2 = rcGroupefonctionfb.getIds2();
     
    System.out.println("Monaction(1) :"+ fb.getIds1.length());
    System.out.println("Monaction(2) :"+ fb.getList1().size());
    System.out.println("Monaction(3) :"+ list2.length);
    System.out.println("Monaction(4) :"+ fb.getList2().size());
     
    for (int i = 0; i < list2.length; i++) {
       System.out.println("---list2 i--->" + list2[i]);
    }
    A l'affichage de mon System.out j'ai :
    Monaction(1) :1
    Monaction(2) :325 // le nombre de lignes de ma list1
    Monaction(3) :1
    Monaction(4) :0 // Alors que visuellement j'ai 5 éléments dans list2
    ---list2 i---> MAN001 // C'est le premier élément qui est retourné alors qu'il y en 5 dans list2
    Merci

  2. #2
    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
    Peux-tu montrer le code de la jsp et celui de l'ActionForm ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Bonjour
    Le code ma 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
    <layout:row>
    	<layout:swap property="rccodefonction,rccodefonction"
    		formProperty="ids1,ids2" selectedStyleClass="FORMSWAP">
    		<layout:collection name="list1" styleClass="FORM2">
    			<layout:collectionItem title="list1.codefonction"
    				property="rccodefonction" />
    			<layout:collectionItem title="list1.libellefonction"
    				property="rclibfonction" style="text-align:left;" />
    		</layout:collection>
    		<layout:collection name="list2" styleClass="FORM2">
    			<layout:collectionItem title="list1.codefonction"
    				property="rccodefonction" />
    			<layout:collectionItem title="list1.libellefonction"
    				property="rclibfonction" style="text-align:left;" />
    		</layout:collection>
    	</layout:swap>
    </layout:row>
    et celui de mon ActionForm :
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    public class RcGroupefonctionFB extends ActionForm {
    	private String pk;
     
    	/** Partie SWAP ** */
    	private String[] ids1;
    	private String[] ids2;
    	private String rccodefonction;
    	ArrayList list1 = new ArrayList();
    	ArrayList list2 = new ArrayList();
     
     
                 public ArrayList getList1() {
    		return list1;
    	}
     
    	/**
             * @param list1
             *            list1 à définir.
             */
    	public void setList1(ArrayList list1) {
    		this.list1 = list1;
    	}
     
    	/**
             * @return Renvoie list2.
             */
    	public ArrayList getList2() {
    		return list2;
    	}
     
    	/**
             * @param list2
             *            list2 à définir.
             */
    	public void setList2(ArrayList list2) {
    		this.list2 = list2;
    	}
     
    	/**
             * @return Renvoie ids1.
             */
    	public String[] getIds1() {
    		return ids1;
    	}
     
    	/**
             * @param ids1
             *            ids1 à définir.
             */
    	public void setIds1(String[] ids1) {
    		this.ids1 = ids1;
    	}
     
    	/**
             * @return Renvoie ids2.
             */
    	public String[] getIds2() {
    		return ids2;
    	}
     
    	/**
             * @param ids2
             *            ids2 à définir.
             */
    	public void setIds2(String[] ids2) {
    		this.ids2 = ids2;
    	}
     
    	/**
             * @return Renvoie rccodefonction.
             */
    	public String getRccodefonction() {
    		return rccodefonction;
    	}
     
    	/**
             * @param rccodefonction
             *            rccodefonction à définir.
             */
    	public void setRccodefonction(String rccodefonction) {
    		this.rccodefonction = rccodefonction;
    	}
    }

  4. #4
    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
    Il y a une erreur ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RcGroupefonctionFB fb= (RcGroupefonctionFB) form;
    String[] list2 = rcGroupefonctionfb.getIds2();
    Tu devrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RcGroupefonctionFB fb= (RcGroupefonctionFB) form;
    String[] list2 = fb.getIds2();
    Sinon, vu le code que tu as posté, les ArrayList list1 et list2 sont mises dans le scope request via la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    request.setAttribute("list1", list1);
    request.setAttribute("list2", list2);
    En aucun cas, tu mets à jour les propriétés list1 et list2 de ton ActionForm RcGroupefonctionFB.
    Donc, normalement, lorsque tu affiches la taille de list1 et list2 via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println("Monaction(2) :"+ fb.getList1().size());
    System.out.println("Monaction(4) :"+ fb.getList2().size());
    tu devrais avoir 0 dans les deux cas.

    Comme tu n'as pas 0 sur le premier, j'en déduis que quelque part dans ton Action tu as initialisé l'ArrayList list1 de ton ActionForm via ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RcGroupefonctionFB fb= (RcGroupefonctionFB) form;
    fb.setList1(list1);
    Donc, sinon, dans la jsp, lorsque tu passes des éléments de la première liste vers la deuxième liste, ce sont les propriétés ids1 et ids2 qui sont modifiées.

    Donc, pour modifier l'ArrayList list2 en fonction des rccodefonction contenus dans le tableau de String ids2, dans la méthode exécutée au submit du formulaire, il faut coder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ArrayList list2 = new ArrayList() ;
    RcGroupefonctionFB fb= (RcGroupefonctionFB) form;
    String[] ids2= fb.getIds2();
    for (int i = 0; i < ids2.length; i++)
    {
       String rccodefonction = ids2[i];
       FonctionnalitesVO foncvo = // code permettant de retrouver le bean FonctionnalitesVO ayant pour rccodefonction = ids2[i] ;
       list2.add(foncvo) ;
    }
    request.setAttribute("list2",list2);
    En espérant avoir été assez claire.

    Questions : ton Action hérite bien de DispatchAction et tu as bien intégré le javascript swap.js du répertoire config dans ta jsp ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Salut,
    Oui mon Action hérite bien de DispatchAction et j'ais bien intégré le javascript swap.js du répertoire config dans la jsp.

    Lorsque que je bascule des éléments de ma liste1 vers ma liste2, je vois bien au niveau de ma page que ma liste2 contient les nouveaux éléments. Cependant lorsque j'exécute ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String[] ids2= fb.getIds2();
    for (int i = 0; i < ids2.length; i++)
    {
       //
    }
    je me rends compte que la taille de ids2 est égale à 1, en l'occurence le premier élément de ma liste (qui je le rappelle en contient 5)..

    Autre chose, si tu initialises list2 à new Array(), lorsque tu rentres dans ta boucle tu n'auras qu'une seule itération, non?

  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
    Si dans la page jsp, tu as transféré 5 éléments dans la liste 2, tu devrais donc avoir 5 éléments dans ids2.
    Donc, là, je ne comprends pas pourquoi tu en trouves un seul.

    Sinon, list2 étant vide avant que tu transfères des éléments d'une liste à l'autre, tu peux très bien faire un new ArrayList() pour la remplir avec les éléments que tu viens de transférer et que tu dois normalement retrouver dans ids2.

    En fait, je m'étais trompée, j'avais mis list2.length au lieu de ids2.length :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ArrayList list2 = new ArrayList() ;
    RcGroupefonctionFB fb= (RcGroupefonctionFB) form;
    String[] ids2= fb.getIds2();
    for (int i = 0; i < ids2.length; i++)
    {
       String rccodefonction = ids2[i];
       FonctionnalitesVO foncvo = // code permettant de retrouver le bean FonctionnalitesVO ayant pour rccodefonction = ids2[i] ;
       list2.add(foncvo) ;
    }
    Peux-tu montrer le code complet de la DispatchAction ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Ok v'la ma dispatchAction :
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
    /** ************************************ */
    	/** * PREMIERE METHODE APPELEE** */
    	/** * ELLE PERMET D'INITIALISER TOUS LES ELEMENTS DE LA PAGE** */
    	/** ************************************ */
    	public ActionForward unspecified(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws Exception {
     
    		ActionErrors errors = new ActionErrors();
    		ActionForward forward = new ActionForward(); // return value
    		String ctxmenu = (String) request.getSession().getAttribute(
    				tn.com.tw.java.utils.ConstManif.CTXMENU);
    		String page = request.getParameter(ConstManif.PAGE);
     
    		RcGroupefonctionFB rcGroupefonctionfb = (RcGroupefonctionFB) form;
    		try {
    			rcGroupefonctionfb.reset(mapping, request);
    			rcGroupefonctionfb.setListeRcGroupefonction(new Vector());
    		} catch (Exception e) {
    			errors.add("name", new ActionError(e.getMessage()));
    			if (!errors.isEmpty()) {
    				saveErrors(request, errors);
    			}
    		} finally {
    			setupRechercheFonc(rcGroupefonctionfb, request);
    			forward = mapping.findForward(page);
    		}
    		return forward;
    	}
     
    /** ************************************ */
    	/** * METHODE POUR REMPLIR LE SWAP** */
    	/** ************************************ */
    	private void setupFonctionnalites(
    			RcGroupefonctionFB groupefonctionFB, HttpServletRequest request)
    			throws TwreException {
    		ReferencesCommunsCmd referencesCommunsCmd = new ReferencesCommunsCmd();
     
    		ListeFonc listeFonc = new ListeFonc();
    		Vector listFoncInitial = new Vector();
    		Vector listFoncFinal = new Vector();
    		String codegroupe = "";
     
    		ArrayList list1 = new ArrayList();
    		ArrayList list2 = new ArrayList();
     
    		listeFonc = referencesCommunsCmd.getListeFonctionnalites(codegroupe);
    		listFoncInitial = listeFonc.getListFoncInitial();
     
    		for (int i = 0; i < listFoncInitial.size(); i++) {
    			FonctionnalitesVO foncvo = new FonctionnalitesVO();
    			foncvo = (FonctionnalitesVO) listFoncInitial.get(i);
    			list1.add(foncvo);	
    		}
     
    		request.setAttribute("list1", list1);
    		request.setAttribute("list2", list2);
     
    		groupefonctionFB.setList1(list1);
    		groupefonctionFB.setList2(list2);
     
    	}
     
    	/** ************************************ */
    	/** * ENREGISTREMENT ** */
    	/** * ELLE EST APPELEE A LA VALIDATION DU FORMULAIRE ** */
    	/** * APRES AVOIR CHOISI LES ELEMENTS LIST1 => LIST2 ** */
    	/** ************************************ */
    	public ActionForward enregistrerRcGroupefonction(ActionMapping mapping,
    			ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) throws Exception {
     
    		ActionErrors errors = new ActionErrors();
    		ActionForward forward = new ActionForward(); // return value
     
    		//La classe des commandes
    		ReferencesCommunsCmd referencesCommunsCmd = new ReferencesCommunsCmd();
     
    		//Le Form Bean
    		RcGroupefonctionFB rcGroupefonctionfb = (RcGroupefonctionFB) form;
     
    		//Le VO
    		GroupefonctionVO groupefonctionvo = new GroupefonctionVO();
     
    		//La page de forward
    		String page = (request.getParameter(ConstManif.PAGE) == null ? "saisieRcGroupefonction"
    				: request.getParameter(ConstManif.PAGE));
     
    		String[] l2 = rcGroupefonctionfb.getIds2();
    		ArrayList v =  rcGroupefonctionfb.getList2();
    		try {
    			System.out
    					.println("RcGroupefonctionACT.enregistrerRcGroupefonction()"
    							+ rcGroupefonctionfb.getIds1().length);
    			System.out
    					.println("RcGroupefonctionACT.enregistrerRcGroupefonction()"
    							+ rcGroupefonctionfb.getList1().size());
    			System.out
    					.println("RcGroupefonctionACT.enregistrerRcGroupefonction()"
    							+ l2.length);
    			System.out
    					.println("RcGroupefonctionACT.enregistrerRcGroupefonction()"
    							+ rcGroupefonctionfb.getList2().size());
    			for (int i = 0; i < l2.length; i++) {
    				System.out.println("---l2 i--->" + l2[i]);
     
    			}
    			//On forward si succes
    			forward = mapping.findForward(page);
     
    		} catch (Exception e) {
    			errors.add("name", new ActionError(e.getMessage()));
    			forward = mapping.findForward("saisieRcGroupefonction");
    		} finally {
    			setupRechercheFonc(rcGroupefonctionfb, request);
    			if (!errors.isEmpty()) {
    				saveErrors(request, errors);
    			}
    		}
     
    		return forward;
    	}

  8. #8
    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
    Il y a des erreurs mais je pense que c'est en postant le code (tu n'as apparemment pas fait un simple copier/coller ): le nom de la méthode est setupFonctionnalites alors que tu fais appel à une méthode setupRechercheFonc et le throws TwreException pour cette méthode.

    Ces erreurs-là n'ont à priori rien à voir avec ton problème actuel.

    Pour le moment, je ne vois pas ce qui cloche.

    A tout hasard, peux-tu montrer comment tu as défini le mapping de la DispatchAction dans le struts-config.xml ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    ça me gave, je vais essayer de tout recasser et reconstruire moi-même.
    je te tiens au courant...

  10. #10
    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
    Si tu veux, je peux poster un exemple qui fonctionne ?
    En comparant, tu arriveras peut-être mieux à voir ce qui cloche dans ton code.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Ok de toute façon au point où j'en suis ...

    Merci

  12. #12
    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
    mapping de l'Action :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            <action path="/swapUserList" type="test.UserListDispatchAction"
                parameter="reqCode" name="userListForm" validate="false"> 
                <forward name="init" path="/swapUserList.jsp"/>
                <forward name="display" path="/swapUserList2.jsp"/>
            </action>
    ActionForm UserListForm :
    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
    public class UserListForm extends ActionForm
    {
    	private ArrayList userList1 = new ArrayList();
    	private String[] users1 ;
    	private String[] users2 ;
     
    	public ArrayList getUserList1()
    	{
    		return userList1;
    	}
    	public void setUserList1(ArrayList userList1)
    	{
    		this.userList1 = userList1;
    	}
    	public String[] getUsers1()
    	{
    		return users1;
    	}
    	public void setUsers1(String[] users1)
    	{
    		this.users1 = users1;
    	}
    	public String[] getUsers2()
    	{
    		return users2;
    	}
    	public void setUsers2(String[] users2)
    	{
    		this.users2 = users2;
    	}
    UserListDispatchAction :
    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
    54
    55
    56
    57
    58
    59
    public class UserListDispatchAction extends DispatchAction
    {
        public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    	{
        	System.out.println("UserListDispatchAction init ...") ;
     
        	ArrayList userList1 = new ArrayList() ;
        	userList1.add(new User("Peter","Gabriel")) ;
        	userList1.add(new User("Dave","Gahan")) ;
        	userList1.add(new User("Martin","Gore")) ;
        	userList1.add(new User("Roland","Orzabal")) ;
        	userList1.add(new User("Phil","Collins")) ;
     
        	request.setAttribute("userList1",userList1) ;
     
        	ArrayList userList2 = new ArrayList() ;
        	request.setAttribute("userList2",userList2) ;
     
        	UserListForm userListForm = (UserListForm) form ;
        	userListForm.setUsers1(new String[userList1.size()]) ;
        	userListForm.setUsers2(new String[userList1.size()]) ;
     
        	userListForm.setUserList1(userList1) ;
     
        	return(mapping.findForward("init"));
    	}
        public ActionForward display(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    	{
        	System.out.println("UserListDispatchAction display ...") ;
     
        	UserListForm userListForm = (UserListForm) form ;
        	String[] users2 = userListForm.getUsers2() ;
     
        	System.out.println("Taille users1="+userListForm.getUsers1().length) ;
        	System.out.println("Taille users2="+userListForm.getUsers2().length) ;
     
        	ArrayList userList2 = new ArrayList() ;
        	for (int i=0; i<users2.length; i++)
        	{
        		String nom = users2[i] ;
        		System.out.println(nom) ;
        		User user = this.getUser(userListForm.getUserList1(),nom) ;
        		userList2.add(user) ;
        	}
        	request.setAttribute("userList2",userList2) ;
        	return(mapping.findForward("display"));
    	}
        private User getUser(ArrayList userList1,String nom) 
        {
        	System.out.println("Taille userList1="+userList1.size()) ;
        	User user = null ;
        	for (int i=0; i<userList1.size(); i++)
        	{
        		user = (User) userList1.get(i) ;
        		if (nom.equals(user.getNom())) break ;
        	}
        	return user ;
        }
    }
    pagePrincipale.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
     
    <html:link action="swapUserList?reqCode=init">swap UserList</html:link></br>
    swapUserList.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
    25
    26
    27
    28
    29
    30
    31
    <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
     
    <html>
     
    <head>
    	<layout:skin includeScript="true"/>
    	<script src="<%=request.getContextPath()%>/config/swap.js"></script>
    </head>
     
    <body>
     
    <h3>Swap userList</h3>
     
    <layout:form action="/swapUserList" reqCode="display" styleClass="FORM">
    	<layout:line>
    		<layout:swap property="nom,nom" formProperty="users1,users2" selectedStyleClass="FORMSWAP">
    			<layout:collection name="userList1" styleClass="FORM"> 
    				<layout:collectionItem title="Nom" property="nom"/> 
    				<layout:collectionItem title="Prenom" property="prenom"/> 
    			</layout:collection>
    			<layout:collection name="userList2" styleClass="FORM">
    				<layout:collectionItem title="Nom" property="nom"/>
    				<layout:collectionItem title="Prenom" property="prenom"/>
    			</layout:collection> 
    		</layout:swap>
    		<layout:submit valign="top">Submit</layout:submit> 
    	</layout:line> 
    </layout:form>
     
    </body>
    </html>
    swapUserList2.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
    <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
     
    <html>
     
    <head>
    	<layout:skin includeScript="true"/>
    </head>
     
    <body>
     
    <h3>userList2</h3>
     
    <layout:collection name="userList2" styleClass="FORM" align="left">
         <layout:collectionItem title="Nom" property="nom"/>
         <layout:collectionItem title="Prenom" property="prenom"/>
    </layout:collection>
     
    </body>
    </html>
    En espérant n'avoir rien oublié.

    Je précise que le code que je viens de poster est celui d'une appli de test donc pas du tout optimisé comme il devrait l'être en production.
    C'est juste un exemple simple qui montre comment ça fonctionne.

  13. #13
    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,
    je me permets de te parler du composant swap de JSControlsTags. Peut etre que tu seras interesse par cette taglib.
    Ce controle est base sur scriptaculous. Il permet de faire du drag/drop entre plusieurs listes. Tu peux aller voir la démo pour voir les fonctionnalites du composant swap.

    Angelo

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut

    Aaaaaaaaaaaaaaaaaahhhhhhhhhhhhhh!!!!!!!!!!!
    c_nvy je viens d'essayer ton cas et ça ne marche pas. je l'ai repris à l'identique.

    ActionForm RcGroupefonction FB
    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
    54
    55
    56
     
    public class RcGroupefonctionFB extends ActionForm {
       private String[] ids1 = {};
       private String[] ids2 = {};
       private String rccodefonction;
       ArrayList list1 = new ArrayList();
     
       /*** @return Renvoie list1.*/
       public ArrayList getList1() {
          return list1;
       }
     
       /*** @param list1 * list1 à définir. */	
       public void setList1(ArrayList list1) {
          this.list1 = list1;
       }
     
       /*** @return Renvoie list2. */
       public ArrayList getList2() {
          return list2;
       }
     
       /*** @param list2 * list2 à définir. */
       public void setList2(ArrayList list2) {
          this.list2 = list2;
       }
     
       /*** @return Renvoie ids1. */
       public String[] getIds1() {
          return ids1;
       }
     
       /*** @param ids1 * ids1 à définir. */
       public void setIds1(String[] ids1) {
          this.ids1 = ids1;
       }
     
       /*** @return Renvoie ids2. */
       public String[] getIds2() {
          return ids2;
       }
     
       /*** @param ids2 * ids2 à définir. */
       public void setIds2(String[] ids2) {
          this.ids2 = ids2;
       }
     
       /*** @return Renvoie rccodefonction. */
       public String getRccodefonction() {
          return rccodefonction;
       }
     
       /*** @param rccodefonction * rccodefonction à définir. */
       public void setRccodefonction(String rccodefonction) {
          this.rccodefonction = rccodefonction;
       }
    DispatchAction RcGroupefonctionACT
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
                 /** ************************************ */
    	/** * METHODE INIT** */
    	/** ************************************ */
    	public ActionForward init(ActionMapping mapping,
    			ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) throws Exception {
    		String page = "saisie";
    		ActionForward forward = new ActionForward();
    		ReferencesCommunsCmd referencesCommunsCmd = new ReferencesCommunsCmd();
     
    		ListeFonc listeFonc = new ListeFonc();
    		Vector listFoncInitial = new Vector();
    		Vector listFoncFinal = new Vector();
    		String codegroupe = "";
     
    		ArrayList list1 = new ArrayList();
    		ArrayList list2 = new ArrayList();
     
    		listeFonc = referencesCommunsCmd.getListeFonctionnalites(codegroupe);
    		listFoncInitial = listeFonc.getListFoncInitial();
     
    		for (int i = 0; i < listFoncInitial.size(); i++) {
    			FonctionnalitesVO foncvo = new FonctionnalitesVO();
    			foncvo = (FonctionnalitesVO) listFoncInitial.get(i);
    			list1.add(foncvo);
    		}
     
    		request.setAttribute("list1", list1);
    		request.setAttribute("list2", list2);
     
    		groupefonctionFB.setIds1(new String[list1.size()]);
    		groupefonctionFB.setIds2(new String[list1.size()]);
    		forward = mapping.findForward(page);
    		return forward;
    	}
     
     
    	/** ************************************ */
    	/** * RECUPERER LISTE 2** */
    	/** ************************************ */
    	public ActionForward recupe2(ActionMapping mapping,
    			ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) throws Exception {
     
    		ActionForward forward = new ActionForward(); // return value
     
    		//La classe des commandes
    		ReferencesCommunsCmd referencesCommunsCmd = new ReferencesCommunsCmd();
     
    		//Le Form Bean
    		RcGroupefonctionFB rcGroupefonctionfb = (RcGroupefonctionFB) form;
     
    		//Le VO
    		GroupefonctionVO groupefonctionvo = new GroupefonctionVO();
     
    		//La page de forward
    		String page = "saisie";
     
    		String[] s1 = rcGroupefonctionfb.getIds1();
    		String[] s2 = rcGroupefonctionfb.getIds2();
     
    		ArrayList foncList2 = new ArrayList();
    		try {
    			System.out
    					.println("RcGroupefonctionACT.enregistrerRcGroupefonction()"
    							+ s1.length);  ==> 1
    			System.out
    					.println("RcGroupefonctionACT.enregistrerRcGroupefonction()"
    							+ s2.length);  ==> 1
     
    			for (int i = 0; i < s2.length; i++) {
    				String fonction = s2[i];
    				System.out.println(fonction);
    				FonctionnalitesVO vo = this.getFonc(rcGroupefonctionfb
    						.getList1(), fonction);
    				foncList2.add(fonction);
    			}
    			System.out
    					.println("RcGroupefonctionACT.enregistrerRcGroupefonction()"
    							+ foncList2.size());  ==> 1
    			request.setAttribute("list2", foncList2);
     
    			//On forward si succes
    			forward = mapping.findForward(page);
     
    		} catch (Exception e) {
    			errors.add("name", new ActionError(e.getMessage()));
    			forward = mapping.findForward("saisieRcGroupefonction");
    		} finally {
    			setupFonctionnalites(rcGroupefonctionfb, request);
    			setupRechercheFonc(rcGroupefonctionfb, request);
    			if (!errors.isEmpty()) {
    				saveErrors(request, errors);
    			}
    		}
     
    		return forward;
    	}
     
    	private FonctionnalitesVO getFonc(ArrayList foncList1, String fonc) {
    		System.out.println("Taille userList1=" + foncList1.size());  ==> 0
    		FonctionnalitesVO vo = null;
    		for (int i = 0; i < foncList1.size(); i++) {
    			vo = (FonctionnalitesVO) foncList1.get(i);
    			if (fonc.equals(vo.getRccodefonction()))
    				break;
    		}
    		return vo;
    	}
    MaPageJSP
    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
     
    <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout"%>
    <layout:form action="/rcGroupefonctionACT" method="post" reqCode=""
    	width="100%">
    <layout:grid width="100%" cols="2">
    	<layout:button styleClass="buttonBar"
    		onclick="doSubmit('recup2','')">
    		<layout:message key="button.recup" />
    	</layout:button>
    	<layout:cell width="50%" />
    </layout:grid>
    <layout:line>
    	<layout:swap property="rccodefonction,rccodefonction"
    		formProperty="ids1,ids2" selectedStyleClass="FORMSWAP">
    		<layout:collection name="list1" styleClass="FORM2">
    			<layout:collectionItem title="list1.codefonction"
    				property="rccodefonction" />
    			<layout:collectionItem title="list1.libellefonction"
    				property="rclibfonction" style="text-align:left;" />
    		</layout:collection>
    		<layout:collection name="list2" styleClass="FORM2">
    			<layout:collectionItem title="list1.codefonction"
    				property="rccodefonction" />
    			<layout:collectionItem title="list1.libellefonction"
    				property="rclibfonction" style="text-align:left;" />
    		</layout:collection>
    	</layout:swap>
    </layout:line>
    </layout:form>

    Eventuellement mon fichier JS où vForms() est une méthode me permettant de controler les champs obligatoires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function doSubmit(requestCode,page){
    if(vForms()==false)return;
    document.forms[0].reqCode.value =requestCode;
    document.forms[0].action = document.forms[0].action+'?page='+page;
    document.forms[0].submit();
    }
    Voilà j'espère que vous y verrez plus clair moi je suis au bord du gouffre

  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
    Je peux t'assurer que le code que j'ai posté fonctionne chez moi.

    Ce n'est pas vraiment identique dans la mesure où tu soumets la méthode recup2 (d'ailleurs, c'est recupe2 ou recup2 ?) via du javascript.

    Sinon, la méthode getFonc(), qui correspond à ma méthode getUser(), ce n'est pas propre. C'était pour l'exemple. Il ne faut pas laisser comme ça.

    Peux-tu montrer le mapping de ton Action dans le struts-config.xml ?

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Cependant j'apperçoie un peu la lumière. En effet au lieu d'utiliser un <layout:button> comme dans mon cas, j'ai utilisé un <layout:submit> et là mystère et boule de gomme ça marche!!!

    Alors ou j'ai pas tout compris... ou je suis vraiment un boulet

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Struts-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <action path="/rcGroupefonctionACT" type="sn.com.douane.web.rc.action.RcGroupefonctionACT" name="rcGroupefonctionFB" scope="session" parameter="reqCode">
    	<forward name="saisie" path="/pages/rc/groupefonction/rcIndex/rcGroupefonctionSaisieIndex.jsp">
    	</forward>		
    </action>
    Je sais que getFonc() n'est pas propre, je vais lui donner bain bain après avoir fait tourner ce code...

  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
    J'ai fait le test avec le layout:button et ta fonction javascript doSubmit, sans le "if(vForms()==false)return;", et ça fonctionne très bien.

    Tu as raison, il y a de quoi se taper la tête contre un mur.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Bonjour c_nvy, comment va ce matin?
    Le soucis c'est que sur ma page j'ai plusieurs boutons, donc plusieurs <layout:button>. Si j'utilise un <layout:submit>, je ne peux mêtre qu'une seule méthode dans la proriété reqcode de mon <layout:form>.
    De plus, cette méthode javascript me permet de "valider" mon formulaire. Je m'explique, sur mon formulaire j'ai des champs écrit comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <layout:text property="NUM_RCCODEGROUPE_OB" styleClass="input200"
    			key="RcGroupefonctionFB.NUM_RCCODEGROUPE_OB" maxlength="15" />
    		<layout:cell />
    		<layout:cell />
     
    		<layout:text property="TNUM_RCLIBGROUPE_OB" styleClass="input200"
    			key="RcGroupefonctionFB.TNUM_RCLIBGROUPE_OB" maxlength="255" />
    		<layout:cell />
    		<layout:cell />
    La méthode vForms() me permet alors de :
    Vérifier le type de champs : NUM_ pour numérique, TNUM_ pour alphanumérique etc... et de s'assurer que j'ai saisi le bon format. Par ex : pour un champ "NUM_", je peux saisir que des chiffres.
    Controler les champs obligatoires : _OB. Si le nom du champ se termine par "_OB", alors un controle sur la valeur de ce champ est effectué. S'il est vide, au submit du formulaire, il me retourne un message alert.

    En gros voilà, je n'ai pas développé cette fonction, ce sont ceux qui ont conçus l'architecture qui l'ont fait. Cependant ils ne sont plus là car leur contrat avec notre boite est arrivé à terme . Bref je pense que je vais passer en revue ce code js ou alors je vais rajouter une fonction selectAll() comme j'ai vu dans quelques posts à ce sujet et je verrai bien ce que cela va donner.

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Sénégal

    Informations forums :
    Inscription : Mars 2003
    Messages : 80
    Points : 46
    Points
    46
    Par défaut
    Oyé Oyé !!!
    Je viens de tester en rajoutant une fonction selectAll() à la suite de ma fonction vForms() (qui je le rappelle me permet de valider mon formulaire) et ça marche!!!

    Donc un grand merci à c_nvy!!!

    Pour azerr, j'avais téléchargé le source de jscontrolswap. mais bon je l'utiliserai dans une deuxième phase pour le moment, je veux juste faire tourner ce code et après on verra. merci à toi aussi

    Vive moi!!!!

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

Discussions similaires

  1. DBGrid récupérer les valeurs de l'enregistrement courant
    Par bob_sapp dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/09/2014, 07h56
  2. Réponses: 1
    Dernier message: 14/01/2014, 10h48
  3. Réponses: 4
    Dernier message: 24/06/2010, 10h49
  4. Récupérer les valeur sur une deuxième page
    Par Msysteme dans le forum ASP.NET
    Réponses: 4
    Dernier message: 02/03/2009, 18h10
  5. [Couleur] Récupérer les valeurs R,V,B et L,U,V ?
    Par M4v3rick dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/01/2004, 03h28

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