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 :

2 combobox dépendants


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut 2 combobox dépendants
    bonjour

    je veux créér 2 combobox dans ma jsp,les valeurs du 2eme combo dépendent du 1er :

    1-si je choisis la valeur ("x") du combo1 l'autre combo2 devient inactif ou bloqué

    2-si je choisis d'autres valeurs le contenu du combo2 sera différent en fonction de cette valeur

    comment je dois faire??sachant que je travail avec struts1.2

    merci pour votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Points : 653
    Points
    653
    Par défaut
    Struts ne propose aucune solution pour cela, il faut que tu te tourne vers JavaScript.

  3. #3
    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 devrais jeter un oeil au tag select de Struts-Layout et ses attributs layoutId, onchange, ...
    Et pour les listes déroulantes dépendantes, regarde les tags options et optionsDependent et aussi la FAQ Struts-Layout.

  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
    Ci-dessous une solution qui fonctionne en Struts-Layout 1.3 :
    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
    <%@ taglib uri="/WEB-INF/struts-layout.tld" prefix="layout" %>
     
    <html>
    <head>
       <layout:skin includeScript="true"/>
       <script>
       function cacher()
       {
    	if ( document.nomDuFormBean.num1.value == 'x' )
    	{
    		document.getElementById("selCombo2F").style.visibility = "hidden" ;
    	}
    	else
    	{
    		document.getElementById("selCombo2F").style.visibility = "visible" ;
    	}
       }
       </script>
    </head>
     
    <body>
     
    <layout:form action="pathAction">
       <layout:line space="true">
    	<layout:select key="cle1" property="num1"  onchange="cacher();" >	
    		<layout:option value="" />
    		<layout:options collection="list1" property="num" labelProperty="nom" sourceOf="num2"/>
    	</layout:select>
    	<layout:select key="cle2" property="num2" layoutId="selCombo2">
    		<layout:option value=""/>	
    		<layout:optionsDependent collection="list2" dependsFrom="num1"/>
    	</layout:select>
       </layout:line>
    </layout:form>
     
    </body>
     
    </html>
    La deuxième combo disparaît si la valeur sélectée dans la première est égale à x.
    Et si tu choisis une autre valeur dans la première combo, les valeurs de la deuxième changeront.

    Pour constituer les listes, se baser sur ce qui est écrit dans la FAQ Struts-Layout dont j'ai donné le lien précédemment.

  5. #5
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    ou je dois faire la dépendence entre "liste2"et "num1" indiqué dans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <layout:optionsDependent collection="list2" dependsFrom="num1"/>
    et si je doit remplir les 2 combox avec des valeurs de ma base
    par exemple si je choisis dans le premier combo "client" il m'affiche
    dans le 2em combo la liste des clients qui se trouve dans la base
    comment je dois faire??

    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
    Alors, il faudrait créer une classe avec pour propriétés un objet de type String et un objet de type List, qui correspond à la deuxième liste déroulante :
    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
    public class UnObjet implements Serializable
    {
    	private String type;
    	private List list2 = new ArrayList();
     
    	public UnObjet(String type) {
    		this.type= type ;
    	}
    	public String getType() {
    		return this.type;
    	}
    	public void setType(String type) {
    		this.type=type;
    	}
    	public List getList2() {
    		return this.list2;
    	}
    	public void setList2(List liste) {
    		this.list2=liste;
    	}
    }
    La collection list1 est donc une collection d'objets UnObjet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    List list1 = new ArrayList() ;
     
    UnObjet unObjet = new UnObjet() ;
    unObjet.setType("client") ;
    List list2 = // appel de la méthode qui renvoie une liste d'objets Client à partir du résultat du select sur la table des clients ;
    unObjet.setList2(list2) ;
    list1.add(unObjet) ;
    Il faut mettre list1 dans le scope pour la rendre accessible dans la jsp.

    Et dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <layout:select key="cle1" property="type" onchange="cacher();" >	
    	<layout:option value="" />
    	<layout:options collection="list1" property="type" labelProperty="type" sourceOf="num"/>
    </layout:select>
    <layout:select key="cle2" property="num" layoutId="selCombo2">
    	<layout:option value=""/>	
    	<layout:optionsDependent collection="list2" property="num" labelProperty="nom" dependsFrom="type"/>
    </layout:select>

  7. #7
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    bonjour c_nvy

    je veux revenir sur le code que vous m'avez donné et qui réponde au besoin suivant:

    quand je selectionne ds un combo la valeur "x" le 2eme combo disparait

    je veux quand je selectionne par exemple ds le 1er combo un article,
    je fais une requete ds ma base et je récupère son type alors si le type récupéré="x" le 2eme combo disparait
    sinon il apparait et il contient une list récupéré depuis la base

    comment je dois faire ça

    merci de me répondre.

  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
    Citation Envoyé par john_wili Voir le message
    quand je selectionne ds un combo la valeur "x" le 2eme combo disparait
    Je t'ai donné le code pour ça.
    Il faut utiliser la fonction javascript que j'ai appelé cacher, l'attribut onchange sur la première combo pour soumettre la fonction cacher() et l'attribut layoutId sur la deuxième combo pour l'identifier.
    Citation Envoyé par john_wili
    je veux quand je selectionne par exemple ds le 1er combo un article, je fais une requete ds ma base et je récupère son type alors si le type récupéré="x" le 2eme combo disparait
    sinon il apparait et il contient une list récupéré depuis la base.
    J'ai aussi déjà répondu à cette question.
    Il faut que tu écrives une méthode à laquelle tu passes en paramètre un article et qui renvoie la liste d'objets qui correspond à cet article.
    As-tu écrit cette méthode ?

    As-tu également installé Struts-Layout ?

    Si tu souhaites que je t'aide à écrire le code qui correspond exactement à ton besoin, il faut me donner des éléments concrets, soit quelles infos exactement tu souhaites afficher dans chacune des deux listes, quelle valeur sélectionnée dans la première combo fait disparaître la deuxième.
    Donne-moi aussi un peu de code comme celui qui interroge ta base de données et constitue les deux listes que tu cherches à afficher dans des combo, le code de la jsp, ...

  9. #9
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    Voici ce que j'ai fait:

    J’ai 2 combobox dans ma jsp,je les remplis dans une action depuis ma base

    Voici une partie du code de 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
    18
    19
    20
    21
    22
    23
     
    <html:form action="/recep.do" method="post">
      <table border="0">
     
    <tr>
     
       <td> <html:select  property="article">
       <html:options property ="nomArticle"/>
       </html:select> </td>
     
       <td><html:select  property="profil">
    <html:options property ="nomProfil"></html:options>
       </html:select> </td>
     
       </tr>
       </table>
       <html:submit>tester</html:submit>
     
      </html:form>
     
      </body>
     
    </html:html>

    Et voici l’action qui initialise ma jsp en remplissant les 2 combobox :


    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 ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response) {
    		RecepForm recepForm = (RecepForm) form;
     
    try
    		    {
     
     
    	    st2= con.createStatement();
    	    	st3= con.createStatement();
     
     
     
     
    	    	rs2=st2.executeQuery("select profil_libelle from gss_article_profil where profil_statut='A'");
    	    	rs3=st3.executeQuery("select art_art_libelle from gss_article where art_status='A'");
     
     
     
     
     
    	     	while (rs3.next())
    	    	{
     
    	    	four2 = rs3.getString(1).trim();
    	    	System.out.println(four2);
    	    	listArticle.add(four2);
     
    	    	}
    	     	recepForm.setNomArticle(listArticle);
    	     	System.out.println(listArticle);
     
    	     	while (rs2.next())
    	    	{
     
    	    	four3 = rs2.getString(1).trim();
    	    	System.out.println(four3);
    	    	listProfil.add(four3);
     
    	    	}
    	     	recepForm.setNomProfil(listProfil);
    	     	System.out.println(listProfil);
     
     
     
     
     
    	    	return mapping.findForward("preparer1"); 
     
    	}
    }



    Je veux que quand j’affiche ma jsp pour la premier fois le 2eme combo soit invisible ou bien bloqué

    Et quand je choisis dans le premier combo qui contient les articles un article ,je fais la requete suivante pour récupérer le type de l’article selectionné:

    Select ART_TYPE_LIBELLE from article type,article where
    article. ART_TYPE_ID=article_type. ART_TYPE_ID and article.ART_ART_LIBELLE= « l’article seléctioné »

    si le type = « livre » alors le 2eme combo sera visible et il contient la liste remplie avant


    et est ce que je peux travailler sans struts layout?


    merci bcp c_nvy.

  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
    Tu peux effectivement travailler sans Struts-Layout : voir les solutions proposées dans cette discussion.

  11. #11
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    si je veux travailler avec struts layout

    j'ai juste dis est ce que je suis obligée de travailer avec pour résoudre le problèm

    en tout cas je vais travailer avec

    svp c_nvy vous pouvez poursuivre l'idée que vous m'avez donné

    je suis vraiment bloqué

    merci bcp

  12. #12
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    et dans la discussion que vous m'avez conseillé de voire y'a pas le détail

  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
    Pour faire fonctionner les listes déroulantes dépendantes, il faudrait créer une liste d'objets de type Article avec pour propriétés un libelle et une liste de profils.

    Tu pourrais donc créer une classe Article comme ceci :
    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 class Article implements Serializable
    {
    	private String libelle ;
    	private List listProfil= new ArrayList();
     
    	public Article() {
    	}
    	public String getLibelle() {
    		return this.libelle;
    	}
    	public void setLibelle(String libelle) {
    		this.libelle=libelle;
    	}
    	public List getListProfil() {
    		return this.listProfil;
    	}
    	public void setListProfil(List listProfil) {
    		this.listProfil=listProfil;
    	}
    }
    Ensuite, tu pourrais écrire une méthode qui reçoit en paramètre un libellé d'article et qui renvoie la List de profils correspondant à cet article :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public List getListProfil(String libelle)
    {
        List listProfil=new ArrayList() ;
        Statement st= con.createStatement();
        ResultSet rs=st.executeQuery("select profil_libelle from gss_article_profil where profil_statut='A' and art_art_libelle='"+libelle+"'");
     
       while (rs.next())
       {
        	listProfil.add(rs.getString(profil_libelle));
       }
       rs.close() ;
       st.close() ;
       return listProfil ;
    }
    puis constituer la List d'objets Article :
    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
    RecepForm recepForm = (RecepForm) form;
     
    Statement st= con.createStatement();
    ResultSet rs=st.executeQuery("select art_art_libelle from gss_article where art_status='A'");
    while (rs.next())
    {
       String libelle = rs.getString("art_art_libelle");
       Article article = new Article() ;
       article.setLibelle(libelle);
       article.setListProfil(getListProfil(libelle));
       listArticle.add(article);
    }
    rs.close() ;
    st.close() ;
     
    recepForm.setNomArticle(listArticle);
    et enfin dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <layout:select key="article" property="article">	
    	<layout:option value="" />
    	<layout:optionsCollection property="nomArticle" value="libelle" label="libelle" sourceOf="profil"/>
    </layout:select>
    <layout:select key="profil" property="profil">
    	<layout:option value=""/>	
    	<layout:optionsDependent collection="listProfil" dependsFrom="article"/>
    </layout:select>
    A tester.

  14. #14
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    Désolé si j’insiste mais apparemment vous ne m’avez pas compris :

    Mais moi je remplis les 2 combobox dés le début :
    Le 1er contient les articles
    Et le 2eme combobox contient les profils qui correspond à l’article de type :« x »
    Donc juste l’article de type « x » a des profils et les autres types d’articles n’ont pas de profils

    C’est pour ça je veux que le 2eme combobox soit caché quand j’affiche la jsp, ensuite si je selectionne une valeur je fais la requete pour recupérer le type :

    Select ART_TYPE_LIBELLE from article type,article where
    article. ART_TYPE_ID=article_type. ART_TYPE_ID and article.ART_ART_LIBELLE= « l’article seléctioné »

    si le type = « x » alors je veux juste que le 2eme combo soit visible et j’ai pas besoin de le remplir ,il est déjà remplit

    Voila ce que je veux

  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
    ça ne correspond pas vraiment à ce que tu as écrit au début de la discussion :
    Citation Envoyé par john_wili Voir le message
    2-si je choisis d'autres valeurs le contenu du combo2 sera différent en fonction de cette valeur

  16. #16
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    oui c'est vrai mais j'ai exprimé et expliqué le nouveau besoin
    dans la partie9 de la discussion

    en tous les cas j'ai vu la réponse à la question de mima_mine
    elle corespond exactement à mon besoin

    merci

  17. #17
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    J'essaye en vain de mettre en place cette dépendance avec struts-layout.

    Il faut mettre list1 dans le scope pour la rendre accessible dans la jsp.
    Je suis plutôt novice en Struts/Jsp, je n'ai pas compris comment il fallait le faire car effectivement, la jsp ne trouve pas "list1".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.jsp.JspException: Cannot find bean under name list1
    Merci d'avance

  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
    Pour mettre la liste dans le scope request par exemple, il suffit de coder ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttribute("list1",list1) ;

  19. #19
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Pour mettre la liste dans le scope request par exemple, il suffit de coder ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttribute("list1",list1) ;
    Merci, enfin ça fonctionne !

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

Discussions similaires

  1. combobox dépendantes l'une de l'autre
    Par Scrabblouille dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/09/2019, 11h39
  2. Réponses: 7
    Dernier message: 14/06/2015, 20h16
  3. Créer une combobox dépendante d'une autre
    Par deeeel dans le forum NetBeans
    Réponses: 5
    Dernier message: 28/02/2014, 11h34
  4. [PHP 4] Deux ComboBox dépendants des uns et des autres
    Par khachkhouch dans le forum Langage
    Réponses: 1
    Dernier message: 25/09/2012, 22h04
  5. [Joomla!] Formulaire permettant de faire des combobox dépendantes
    Par touff972 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 23/08/2012, 17h58

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