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; } }Quelqu'un saurait-il d'où peut venir ce problème ?
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(); }
Partager