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 :

deux combobox dependantes


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut deux combobox dependantes
    bonjour
    j'ai une question concernant les combobox
    jai 2 combobox la 1er contient les articles et la 2eme contient les profils des articles, mais pas tt les articles possedent un profil (un type bien pricis)

    donc je veux dans ma vue afficher le premier combobox (article) et le 2eme sera caché ou desactivé, des que le user choisi la valeur x du premier combobx (l'article de type T qui possede le profil) le 2eme combo sera afficher ou activé j'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    <tr>
     
       <td> <html:select  property="article">
       <html:options property ="nomArticle"/>
       </html:select> </td>
       <td>
     
    <td><html:select  property="profil"><html:options property ="nomProfil"></html:options>
       </html:select> </td>
    donc si l'utilisateur choisi l'article A1 je fait une requette SQL au niveau de l'action pour récupérer le type de cet article , puis si le type= T1 (valeur fixe) alors je doit afficher l'autre combo pour selectionner le profil

    j'espère que vous m'avez compris
    svp aidez moi

  2. #2
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Si j'ai bien compris, tu cherches à afficher une deuxième combo box selon le choix d'une première combo box. Je vois au moins trois solutions pour faire ce que tu cherches.

    Si j'ai encore bien compris, seul l'article de type T1 comporte un profil. Tu peux donc ramener dans ta page, l'ensemble des articles (avec leur type) et des profils. Ensuite, tu peux utiliser du javascript sur la première combo : si l'article sélectionné est de type T1 alors on réactive la deuxième combo box.

    Soit si tu ne veux pas récupérer les profils à l'affichage ni le type des articles, tu peux faire en sorte là aussi avec du javascript d'envoyer un formulaire contenant la première combo box. Dès lors, tu peux récupérer le type de l'article qui a été sélectionné et de nouveau affiché la page avec si nécessaire la deuxième combo box.
    Le problème de cette solution est qu'elle demande d'envoyer une requête au serveur et de réafficher la page. Ce qui est quand même pas terrible.

    La troisième solution serait d'utiliser de l'ajax est donc de faire là aussi une requête vers le serveur selon la sélection et d'afficher la aussi si nécessaire la combo box. L'avantage ici c'est que l'on ne réaffiche pas toute la page mais on ajoute seulement si nécessaire la combo et cela est fait de manière asynchrone.

    En conclusion, je trouve que la solution est la plus simple à mettre en œuvre.

    EDIT: Deux sujets en dessous, il y a un message avec le même titre qui propose là aussi des solutions : http://www.developpez.net/forums/sho...d.php?t=584763

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut deux combobx dependants
    bonjour

    bon pour votre solution je comprend pas bien les étapes vous pouvez m'éclairer
    et pour mes besoins, je vais reexpliquer:
    je veux afficher 2 combobox dans ma jsp (des qu'elle s'affiche) mais le 1er combo est activé et l'autre est desactivé ou cacher,

    la 1ere combo contient les articles (les libellés) et la 2eme contient les profils des articles, mais j'ai un seule type d'article qui possede un profil (le type=T1) , donc des que le user choisi l'article A1 de type T1 // sachant que je recupére T1 par une requette sql au niveau de l'action , puis je fai un teste si type = T1 alors je rend le 2eme combo accessible (s'il etait desactiver) ou je l'affiche (s'il etait caché)

    voila normalement c'est clair menant

    et pour la reponse qui était posté, c'est avec struts layout et je travail pas avec
    et pour javascript, je sais pas bien travailler avec
    Merci de me repondre

  4. #4
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Le code de la première solution est simple. Par contre, toutes les solutions nécessitent forcément l'utilisation de javascript.

    Il faut savoir que dans les combo box, il y a deux champs : le label et la valeur. Ce que tu peux faire, c'est mettre le nom de l'article comme label et mettre son type comme valeur.

    Ensuite, il faut ajouter une fonction javascript à cette combo box qui effectue un contrôle tout simple qui est : si la valeur de l'élément sélectionné est T1 alors j'affiche ma deuxième combo box.

    Par contre, cette solution a un problème qui est que la valeur de la première combo box contient le type et non plus le nom de l'article. Tu peux toujours t'en sortir mais cela demande de faire un petit trafic avec du javascript. (Par exemple en ajoutant un champs caché contenant le label de l'élément sélectionné par la première combo box. Ou bien changer inter-changer le label et la valeur avant le submit du formulaire).

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    bon voila c' que j'ai fait, j'ai essayé de faire un petit teste sur la vue ou j'ai fixer la valeur de l'article (juste pour voir le resultat sur le 2eme 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
     
     
    <script type="text/javascript">
        function activer() {
     
       if (document.recepForm.article.value == 'SIM ABONNEMENT')
       {
       document.getElementsById("profil").disabled=false;
       }
        }
         </script>
     
     
      <body>
     
    <html:form action="/recep.do" method="post">
     
    <table border="0" width="100%|20">
       <tr>
       <td>Article:</td>
     
        <td>Article profil:</td>
     
       </tr>
       <tr>
     
       <td> <html:select  property="article"   onchange="activer();">
       <html:options property ="nomArticle"/>
       </html:select> </td>
     
       <td><html:select  property="profil"  disabled="true"><html:options property ="nomProfil"></html:options>
       </html:select> </td>
     
       </tr>
     
     
       </table>
     
    </html:form>
     
      </body>
    je voulai des que je choisi la valeur = sim abonnement de la 1ere combo j'active le 2eme........mais ça juste pour tester la fonction activer, mais ça marche pas

    alors mon cas est: des je selectionne l'article "sim abonnement" je dois d'abord ramener son type ="sim postpaid" puis je fait le controle sur le type au niveau de la fonction activer.

    premierement: pour le javascript, la methode getElementsById, normalement je l'utilise si j'avais le champs id dans la balise select ??
    en tout cas y'on a 2 methode getElementsById, et getElementsByName, je les ai essayé mais ça marche pas

    deuxiement: votre derniere solution que vous m'avez envoyé (celle du champs hidden) elle m'apparais logique mais j'ai pas bien compris, vous pouvez m'expliquer !?

  6. #6
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    ehh je vois que vous parliez toujours de label et value mais a mon niveau j'ai pas ces 2 truck dans ma balise select, ou je dois les placer??
    et si je les ajoute, es ce que je dois modifier dans ma form qui est definit comme suit:

    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
     
     
    public class RecepForm extends ActionForm {
     
    private String article;
    private String profil;
    private List  nomArticle;
    private List  nomProfil;
     
     
    public String getArticle() {
    	return article;
    	}
     
     
    public void setArticle(String article) {
                this.article = article;
    	}
     
    public String getProfil() {
    	return profil;
    	}
     
    public void setProfil(String profil) {
    	this.profil = profil;
    	}
     
    public List getNomArticle() {
    	return nomArticle;
    	}	
     
    public void setNomArticle(List nomArticle) {
    	this.nomArticle = nomArticle;
    	}
     
    public List getNomProfil() {
    	return nomProfil;
    	}	
     
    public void setNomProfil(List nomProfil) {
    	this.nomProfil = nomProfil;
    	}	
     
     
    }

  7. #7
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    ehh je vois que vous parliez toujours de label et value mais a mon niveau j'ai pas ces 2 truck dans ma balise select, ou je dois les placer??
    Dans options, on peut renseigner : property et labelProperty.
    - property="valueProperty"
    - labelProperty="labelProperty"

    alors mon cas est: des je selectionne l'article "sim abonnement" je dois d'abord ramener son type ="sim postpaid" puis je fait le controle sur le type au niveau de la fonction activer.
    J'ai dis que dans la première solution, on devait ramener le type avec l'article sinon il faut choisir une autre solution.

  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 une solution en soumettant le formulaire lors de la sélection d'un élément dans la première combo via l'attribut onchange :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:select property="article" onchange="document.recepForm.submit();">
       <html:options property ="nomArticle"/>
    </html:select>
    Ceci provoquera l'exécution de l'Action de path /recep.

    Tu ajoutes une propriété dans l'ActionForm RecepForm qui correspond au type de l'article :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private String type=null ;
    // ajouter getter et setter sur propriété type
    Donc, dans l'Action, tu récupères l'article sélectionné dans le formulaire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RecepForm recepForm = (RecepForm) form ;
    String article = recepForm.getArticle() ;
    if (article != null )
    {
      String type = // ici appel de la méthode qui renvoie le type de l'article sélectionné ;
      recepForm.setType(type) ;
    }
    et dans la jsp, tu testes la valeur du type via un logic:equal pour déterminer si tu mets la combo disabled ou non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <logic:equal name="recepForm" property="type" value="T1">
       <html:select  property="profil"  disabled="false">
          <html:options property ="nomProfil"/>
       </html:select>
    <logic:equal>
    <logic:notEqual name="recepForm" property="type" value="T1">
       <html:select  property="profil"  disabled="true">
          <html:options property ="nomProfil"/>
       </html:select>
    <logic:notEqual>

  9. #9
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    Merci bcp pour votre aide, ça marche tres bien

    y're the best

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

  11. #11
    Membre régulier Avatar de reverse_engineer
    Inscrit en
    Juillet 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 98
    Points : 80
    Points
    80
    Par défaut
    Bonjour ,
    juste une question ,
    j'ai essayé ce que vous avez faits mais mon problème c'est que j'ai un forward dans mon struts-config qui m'emène vers une autre page .
    donc quand j'utilise votre code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <html:select property="article" onchange="document.recepForm.submit();">
       <html:options property ="nomArticle"/>
    </html:select>
    le navigateur me redirectionne vers une autre page ,alors que je veux rafraichir la même page


    Merci d'avance

  12. #12
    Membre régulier Avatar de reverse_engineer
    Inscrit en
    Juillet 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 98
    Points : 80
    Points
    80
    Par défaut
    y'a pas une solutions pour remedier à ce problème sans utiliser Ajax,
    Si quelqu'un aurai une idée


    Merci

  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
    Si tu veux revenir sur la même page, dans l'Action, il faut tout simplement faire un forward vers la même page.

  14. #14
    Membre régulier Avatar de reverse_engineer
    Inscrit en
    Juillet 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 98
    Points : 80
    Points
    80
    Par défaut
    Mais j'ai un bouton submit dans la même page qui m'envois vers une autre page ,et lorsque je change une combo je veux rester dans la même page .

    donc si je change le forward je me retrouverai dans l'autre page si je change un combo

  15. #15
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    normalement tu peut faire ceci:

    pour le combobox tu fait exactement ce que j'ai fait donc le submit() va exécuter l'action qui possede le forward qui retourne vers la meme page (pour rafraichir la page)

    et pour le boutton tu peut creer une autre action qui utilise le meme form et tu met un forward vers une autre page mais au lieu de faire un boutton tu peut faire un lien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    <html:link page="/NomAction.do">
    comme ça au click sur le lien il va exécuté la 2eme action qui te retourne vers l'autre page

    et normalement ça va marcher

    bon courage

  16. #16
    Membre régulier Avatar de reverse_engineer
    Inscrit en
    Juillet 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 98
    Points : 80
    Points
    80
    Par défaut
    Merci pour ta réponse ,mais pour des contraintes de projet!!! je suis obligé d'utiliser le boutons et non les liens .

  17. #17
    Membre régulier Avatar de reverse_engineer
    Inscrit en
    Juillet 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 98
    Points : 80
    Points
    80
    Par défaut
    est ce que quelqu'un aura une idée ,parceque je crois que dans n'importe application on sera confronté à ce problème .je crois pas que struts est aussi faible .

    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
    La solution serait peut-être d'utiliser une DispatchAction ou une LookupDispatchAction pour exécuter une méthode différente de l'Action selon que l'on sélectionne un élément dans la combo ou que l'on clique sur le bouton submit.

    Dans ce cas, la première méthode ferait un forward vers la même page et la seconde, un forward vers une nouvelle page.

    A tester.

  19. #19
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    bonjour

    moi aussi je veux savoir comment elle fonctionne le DispatchAction ou le lookupDispatchAction, si vous pouvez m'indiquer sur un doc ou un lien ou je trouve un exemple sur ça

    merci d'avance

  20. #20
    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

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

Discussions similaires

  1. Lier deux combobox entre eux
    Par zabdaniel dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/02/2009, 10h06
  2. [Developpement] : FieldType avec deux combobox
    Par loueti dans le forum SharePoint
    Réponses: 0
    Dernier message: 02/06/2008, 16h03
  3. deux combo dependantes avec Ajax
    Par osman.amine dans le forum Struts 1
    Réponses: 2
    Dernier message: 28/06/2007, 18h31
  4. Compiler informations de deux combobox dans une textbox
    Par thiephaine59000 dans le forum Général VBA
    Réponses: 1
    Dernier message: 14/05/2007, 17h58
  5. Sychroniser deux comboBox
    Par PhiberOptik dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/06/2006, 22h56

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