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 :

liste de choix dépendantes : pb surprenant


Sujet :

Struts 1 Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 9
    Points
    9
    Par défaut liste de choix dépendantes : pb surprenant
    Bonjour à tous,

    j'essaie de faire deux listes de choix dépendantes sous struts, basé sur la méthode le premier onchange soumet le formulaire qui permet de rafraichir le deuxieme select.

    Ceci marche à peu près mis à part que le premier choix effectué par l'utilisateur n'est pas pris en compte, il faut qu'il fasse un deuxieme choix pour que le second menu soit raffraichit.
    Une fois ce cap passé, tout va pour le mieux dans le meilleur des mondes.

    Je me demandes si cela ne vient pas du fait que la mise a jour des entrées du second select se fait dans la méthode reset du Form... ? Ci dessous les différents fichiers impliqués :
    __________
    page jsp
    __________
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <html:form action="/SubmitDomains" > 
    <html:select  property="selectedDomain" onchange="submit()">
    <html:option value="">Sélectionner un domaine</html:option>
    <html:optionsCollection property="domaines"/>
    </html:select>	
     
    <html:select  property="selectedProject" onchange="submit()">
    <html:option value="">Sélectionner un projet</html:option>
    <html:optionsCollection property="projets"/>
    </html:select>
    </html:form>
    __________
    pages 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
    19
    20
     
    public ActionForward execute(ActionMapping mapping,
                ActionForm form,
                HttpServletRequest request,
                HttpServletResponse response){
     
     
    		HttpSession session = request.getSession(false);
     
     
    		selectedDomainForm theForm = (selectedDomainForm) form;
     
    		String dom=theForm.getSelectedDomain();
    		System.out.println(dom);
    		String proj=theForm.getSelectedProject();
    		System.out.println(proj);
     
    		session.setAttribute("domain", dom);
    		session.setAttribute("project", proj);
    		return mapping.findForward("DomainSelected");
    __________
    fichier Form
    __________
    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
     
    public class selectedDomainForm extends ActionForm{
     
    	private String selectedDomain;
    	private String selectedProject;
     
    	private ArrayList domaines=new ArrayList();
    	private ArrayList projets=new ArrayList();
     
    	public ArrayList getDomaines() { 
    		  return domaines; 
    		 } 
    	public void setDomaines(ArrayList arr){
    		domaines=arr;
    	}
    	public ArrayList getProjets() { 
     
    		return projets; 
    		 } 
    	public void setProjets(ArrayList arr){
    		projets=arr;
    	}
    	public String getSelectedDomain(){
    		return selectedDomain;
    	}
    	public void setSelectedDomain(String loo){
    		selectedDomain=loo;
    	}
    	public String getSelectedProject(){
    		return selectedProject;
    	}
    	public void setSelectedProject(String loo){
    		selectedProject=loo;
    	}
    	public void reset(ActionMapping mapping, HttpServletRequest request) { 
    		this.domaines.clear();
    		this.projets.clear();
    		HttpSession session = request.getSession(false);
    		String temp= new String((String)session.getAttribute("domaines"));
    		if(temp==null){
    			domaines.add(new LabelValueBean("domaine1","domaine1"));
    		}
    		else {
    			//Ici, on a un domaine choisi -> on chope les projets correspondants
    			StringTokenizer arg=new StringTokenizer(temp,";");
    			String test;
    			while(arg.hasMoreTokens()){
    				test=arg.nextToken();
    				domaines.add(new LabelValueBean(test,test));
    			}
     
    		}
    		if(session.getAttribute("domain")==null){
    			System.out.println("pas de domaine");
    					}
    		else{
     
    			System.out.println("on a bien choisi un domaine");
    			String selected=(String)session.getAttribute("domain");
     
    			String login=(String)session.getAttribute("login");
    			String mdp=(String)session.getAttribute("mdp");
     
    			User pers=new User(login, mdp);
    			QC ap=new QC();
    			String restemp=ap.getProjects(pers.getDefDomain(), pers.getDefProject(), login,mdp,selected);
    			StringTokenizer arg=new StringTokenizer(restemp,";");
    			String pro;
    			while(arg.hasMoreTokens()){
    				pro=arg.nextToken();
    				projets.add(new LabelValueBean(pro,pro));
    			}
     
    		}
    		//domaines=(ArrayList)session.getAttribute("domaines");
    	}
    }
    Si vous avez des idées qui pourraient expliquer le fait que le premier choix du select n'est pas pris en compte, j'en serais ravi, merci d'avance.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Points : 246
    Points
    246
    Par défaut
    la méthode "reset" de ton "form bean" n'est pas destiné à ce genre d'utilisation. Il à été prévu pour d'autre cas comme par exemple la gestion des checkbox... PI: la méthode reset est appelée plusieur fois durant le cycle de vie de ton formulaire (donc c'est pour ça que tu as une incohérence au niveau du comportement de ta page)
    Donc le code que tu fais dans le "reset" tu devrais le mettre dans une action qui va s'exécuter avant d'afficher ta page (au lieu d'appeler ta jsp tu appelleras une action .do) par contre ça te fera deux actions pour une même page.

    Proposition: une seule Dispacth action au lieu de deux actions
    Concernant ton action le mieux étant d'utiliser les dispatch action afin de gérer le cycle de vie de ton formulaire en déclarant plusieurs méthodes.
    Par exemple:
    une méthode init: initialise ta page par défault
    une méthode update: prend en compte les choix de l'utilisateur sur la page (dans ton cas tu as fais un choix dans la première 'drop down list' et donc la deuxième doit être mise à jour)
    une méthode submit: prend en compte la soumission du formulaire et là j'appelle ma partie métier.

    après c'est à toi de voir.
    ++

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    merci pour ta réponse karement. Je me doutais bien que c'était pas très orthodoxe d'utiliser la méthode reset.
    Par contre, sachant que
    1. le premier select est rempli une fois pour toute dans l'action associée au link de la page jsp précédente (et conservé en session)
    2. l'action associé au formulaire est déjà écrit et qu'il reste seulement à le modifier


    Je choisis la solution de facilité. En tout cas, merci pour ton aide, j'utiliserais cette solution quand l'occasion se présentera .

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    J'ai crié victoire trop tôt. Une dernière question :

    je remplis la collection contenant les domaines dans l'action précédant la page. Cette collection est ensuite mise en session et le select est sensé etre remplis d'apres celle-ci via le fameux optionsCollection.
    Pourtant, ce n'est pas vraiment le cas :

    Action précédant simplifié
    __________
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    listedom.add(new LabelValueBean("domaine","domaine1"));
     
    session.setAttribute("domaines", listedom);
     
    return mapping.findForward("ConnexionQC");
    Page JSP simplifiée
    _________
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Domaines<br/>  
    <bean:define name="domaines" id="domaines" scope="session"/>
    <html:form action="/SubmitDomains" > 
    <html:select  property="selectedDomain" onchange="submit()">		
    <html:option value="">Sélectionner un domaine</html:option>
    <html:optionsCollection property="domaines"/>
    </html:select>
    Vous auriez une idée pourquoi la liste apparait vide ?

  5. #5
    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 mets la collection en session via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.setAttribute("domaines", listedom);
    pour l'afficher, il faut remplacer l'attribut property par l'attribut name dans le tag html:optionsCollection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <html:select  property="selectedDomain" onchange="submit()">
    <html:option value="">Sélectionner un domaine</html:option>
    <html:optionsCollection name="domaines"/>
    </html:select>
    Mais, comme tu as défini la collection domaines dans ton ActionForm, je te propose de l'initialiser via le setter en remplaçant le session.setAttribute par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    selectedDomainForm theForm = (selectedDomainForm) form;
    theForm.setDomaines(listedom) ;
    Ceci suppose que tu as référencé le form-bean selectedDomainForm dans le mapping de cette Action et que celui-ci est dans le scope session.
    Et là, tu pourras afficher la liste déroulante en utilisant l'attribut property du tag html:optionsCollection comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <html:select  property="selectedDomain" onchange="submit()">
    <html:option value="">Sélectionner un domaine</html:option>
    <html:optionsCollection property="domaines"/>
    </html:select>
    La prochaine fois, jette un oeil à la FAQ.

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Merci de ta patience et de tes réponses C_nvy.
    Pour tout dire, j'avais regardé la faq mais le projet est relativement complexe (en tout cas pour moi, JNI fait mal) et du coup c'est vrai que des fois j'ai un peu du mal à m'y mettre proprement.

    En tout cas merci pour les réponses, ca commence a devenir un peu plus clair tout ca, et en plus cette partie là fonctionne maintenant ;-)

  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
    De rien.

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

Discussions similaires

  1. Listes déroulantes de choix dépendantes l'une de l'autre
    Par mekszterowic dans le forum Access
    Réponses: 1
    Dernier message: 18/06/2015, 09h33
  2. Réponses: 9
    Dernier message: 30/05/2011, 09h12
  3. Réponses: 2
    Dernier message: 11/08/2006, 11h11
  4. Réponses: 10
    Dernier message: 04/05/2004, 16h00
  5. liste de choix
    Par fredmessenger dans le forum ASP
    Réponses: 11
    Dernier message: 03/09/2003, 08h27

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