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

Servlets/JSP Java Discussion :

[Taglib / JSP / Javascript] Liste imbriquées


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier Avatar de Resyek
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Points : 104
    Points
    104
    Par défaut [Taglib / JSP / Javascript] Liste imbriquées
    Bonjour,

    J'ai dans mon application un systeme de listes imbriquées [choix dans liste A => modification de la liste B] un peu particulier. Chaque liste imbriquée est associée à 2 boutons radios oui/non. Il s'agit de critères de recherches.

    A la création, je crée autant de "<html:select>" que j'ai de liste à imbriquées dans ma page. Puis, sur un événement "onchange" de la première liste, je mets à jour la seconde liste. Le problème est que même si l'affichage est correct, lors de la validation du formulaire (appel de la méthode submit), il récupère une mauvaise valeur (il s'agit de la première valeur de la liste que j'ai mise en page.
    Ceci n'est pas très clair, je m'en excuse. Voici un extrait du code.

    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
    JSP - liste imbriquées
                <tr class="ligneRecherche">
                    <td class="libelleRecherche">
                        <html:radio styleId="rpy" property="rechPartenaire" value="true" onclick="manageLists(this.id, '000000');"/><fmt:message>oui</fmt:message>
                        <html:radio styleId="rpn" property="rechPartenaire" value="false" onclick="manageLists(this.id, '000000');"/><fmt:message>non</fmt:message>            
                    </td>
                    <td class="saisieRecherche">
                        <fmt:message>suivantPartenaire</fmt:message>
                    </td>
     
                    <td Class="libelleRecherche"><fmt:message>choixPartenaire</fmt:message></td>
                    <td class="saisieRecherche">
                        <html:select property="partenaire" styleId="listePartenaire"  onchange="majSousListe(this.value,'listeFormule');">
                            <html:options collection="listePartenaires" property="idPartenaire" labelProperty="labelPartenaire"/>
                        </html:select>
                    </td>
                </tr>    
     
                <tr class="ligneRecherche">
                    <td class="libelleRecherche">
                        <html:radio styleId="rfy" property="rechFormule" value="true"  onclick="manageLists(this.id, '000000');"/><fmt:message>oui</fmt:message>
                        <html:radio styleId="rfn" property="rechFormule" value="false"  onclick="manageLists(this.id, '000000');" /><fmt:message>non</fmt:message>            
                    </td>
                    <td class="saisieRecherche">
                        <fmt:message>suivantFormule</fmt:message>
                    </td>
                    <td Class="libelleRecherche"><fmt:message>choixFormule</fmt:message></td>
                        <td class="saisieRecherche">
                            <html:select property="formule" styleId="listeFormule" style="min-width: 100" >
                                <html:options collection="${modeleVoucherListe.partenaire}" property="idFormule" labelProperty="labelFormule"/>
                            </html:select>
                            <c:forEach items="${listePartenaires}" var="liPartenaire">
                                <html:select property="formule" style="display:none" styleId="${liPartenaire.idPartenaire}">
                                    <html:options collection="${liPartenaire.idPartenaire}" property="idFormule" labelProperty="labelFormule"/>
                                </html:select>
                            <c:set var="afficheCotisation" value="none"/>
                            </c:forEach>
                                <html:select property="formule" style="display:none" styleId="000000">
                                    <html:options collection="${'000000'}" property="idFormule" labelProperty="labelFormule"/>
                                </html:select>
     
                    </td>
     
                </tr>
    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
    la fonction Javascript "manageLists(id, code)"
    [Note : cette fonction permet de gérer le comportement exotique de ces listes imbriquées. En effet, une configuration particulière des boutons radios permet de ne faire la recherche que sur la liste B]
     
        function manageLists(id, codeListeTotale) {
            var listeToChange;
     
            if(id == 'rfn' || id == 'rfy' ) listeToChange = document.getElementById('listeFormule');
            else if(id == 'rpn' || id == 'rpy') listeToChange = document.getElementById('listePartenaire');
     
            switch(id) {
                case "rpy":
                    listeToChange.disabled=false;
                    if(document.getElementById('rfy').checked==true) {
                        majSousListe(listeToChange.value, 'listeFormule');
                    }
                    break;
     
                case "rpn":
                    listeToChange.disabled=true;
                    if(document.getElementById('rfy').checked==true) {
                        majSousListe('000000', 'listeFormule');
                    }
                break;
     
                case "rfy":
                    listeToChange.disabled=false;
                    if(document.getElementById('rpn').checked==true) {
                        majSousListe('000000', 'listeFormule');
                    }
                break;
     
                case "rfn":
                    listeToChange.disabled=true;
                break;
            }
     
        }
    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
    la fonction Javascript "majSousListe"
     
    function majSousListe(choix,sousListe) 
    { 
          raz(sousListe); 
          if(document.getElementById(choix).length==0){
                 new_option = new Option('                   ',''); 
                 document.getElementById(sousListe).
                     options[document.getElementById(sousListe).length]=new_option; 
          }else {
              for (i=0; i<document.getElementById(choix).length; i++) 
                 { 
                 new_option = new Option(document.getElementById(choix).options[i].text,document.getElementById(choix).value); 
                 document.getElementById(sousListe).
                     options[document.getElementById(sousListe).length]=new_option; 
                 } 
           }
     
           document.getElementById(sousListe).focus();
    }
    Quelqu'un saurait-il d'où peut venir ce problème ?
    Keaton me disait toujours: "Je ne crois pas en Dieu, mais j'ai peur de lui."
    Moi, je crois en Dieu mais j'ai peur de Keyser Soze...
    [Verbal Kint - The Usual Suspects]

  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
    Dans la fonction javascript appelée dans le onchange, il faut faire un submit du formulaire afin de mettre à jour la propriété partenaire de ton ActionForm comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    document.forms['taForm'].submit();
    
    Modératrice Java - Struts, Servlets/JSP, ...

Discussions similaires

  1. [JSP / JavaScript] Listes déroulantes liées
    Par salma.i dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 27/04/2015, 00h47
  2. Listes deroulantes liées JSP/Javascript
    Par aminemao dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 18/08/2011, 12h36
  3. [JSP-Javascript]Basculer des éléments d'une liste à l'autre avec JSP
    Par smutmutant2003 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 17/09/2009, 15h56
  4. [ JSP ][ Débutant ] Liste déroulante + actualisation de page
    Par captainpouet dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 17/04/2004, 19h51

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