Bonjour, voulant mettre en place deux listes liées avec AJAX, j'ai suivi le tuto de http://siddh.developpez.com/articles/ajax/
La seule différence c'est que moi j'utilise pas du php mais une page JSP et du hibernate pour l'acces aux données.
Voici donc ce que j'ai actuellement :
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 function getXhr(){ var xhr = null; if(window.XMLHttpRequest){ // Firefox et autres xhr = new XMLHttpRequest(); alert('new XMLHttpRequest'); } else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); alert('new activeXObject'); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); xhr = false; } return xhr; } function go() { //alert('valeur de la liste :'+ //document.getElementById('structures').options[document.getElementById('structures').selectedIndex].text+' id='+ //document.getElementById('structures').options[document.getElementById('structures').selectedIndex].value); var xhr = getXhr(); // On défini ce qu'on va faire quand on aura la réponse xhr.onreadystatechange = function(){ alert('debug0 ='+xhr.readyState); // On ne fait quelque chose que si on a tout reçu et que le serveur est ok if(xhr.readyState == 4 /* && xhr.status == 200*/){ alert('debug1'); leselect = xhr.responseText; alert('leselect:'+leselect); // On se sert de innerHTML pour rajouter les options a la liste document.getElementById('utilisateurs').innerHTML = leselect; } } // Ici on va voir comment faire du post xhr.open("POST","/intranet/integration/demande/ListeUtilisateurs.jsp",true); //xhr.open("POST","/intranet/integration/demande/formulaireDemande.jsp",true); // ne pas oublier ça pour le post xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); // ne pas oublier de poster les arguments // ici, l'id de la structure sel = document.getElementById('structures'); idstruc = sel.options[sel.selectedIndex].value; alert('idStruc = '+idstruc); xhr.send("idStructure="+idstruc); }
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 <table border cellspacing="10px"> <tr > <td > <select name="structures" id="structures" onChange="go()"> <option value="vide">Liste structures</option> <% Iterator it1 = GetList.getStructureList().iterator(); String s=null; while(it1.hasNext()){ Structure struct =(Structure)it1.next(); s=struct.getNom(); %> <option value="<%=struct.getId()%>"> <%=s%></option> <%}%> </select> <input type="button" value="voir" onClick="chargerUtilisateurs()" /> </td> <td> <select name="utilisateurs" id="utilisateurs"> <% if(request.getParameter("idStructure")!=null){ Iterator it2 = GetList.getUtilisateurList(/*request.getParameter("idStructure")*/13).iterator(); String p=null; while(it2.hasNext()){ Utilisateur util =(Utilisateur)it2.next(); p=util.getNom()+" "+util.getPrenom(); %> <option value="<%=util.getId()%>"> <%=p%></option> <%} }else{%> <option value="vide">Choisir une structure</option> <%} %> </select> </td> </tr> </table>
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 public class GetList { public static List getStructureList() { Session session = HibernateUtil.currentSession(); List structures = null; try { structures = StructureDAO.getInstance().findAll("nom"); } catch (Exception ex) { ex.printStackTrace(); } return structures; } public static List getUtilisateurList(int id) { Session session = HibernateUtil.currentSession(); List utilisateurs = null; String maRequete = "from Utilisateur where id in ( select utilisateur from Affectation where structure=" + id+")"; try { utilisateurs = UtilisateurDAO.getInstance().find(maRequete); // utilisateurs = UtilisateurDAO.getInstance().findAll("nom"); /* SQLQuery query = session .createSQLQuery("select * from compte where ID_COMPTE in ( select ID_COMPTE from Affectation where ID_STRUCTURE=" + id+")"); //Query query = session //.createSQLQuery("select * from Utilisateur where id in ( select utilisateur from Affectation where fonction=" + id+")"); */ //utilisateurs = query.list(); } catch (Exception ex) { ex.printStackTrace(); } return utilisateurs; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <% Iterator it2 = GetList.getUtilisateurList(/*request.getParameter("idStructure")*/13).iterator(); String p=null; while(it2.hasNext()){ Utilisateur util =(Utilisateur)it2.next(); p=util.getNom()+" "+util.getPrenom(); %> <option value="<%=util.getId()%>"> <%=p%></option> %>
En fait grace aux messages de debug que j'ai placé j'ai pu voir que tout se deroule bien jusqu'au if(xhr.readyState == 4
Apres il m'affiche bien le debug1 mais au select, c'est le plantage, apparement ce serait dû à ma page ListeUtilisateurs.jsp qui serait incorrecte.
Si vous pouviez y jeter un oeil , ou si vous aviez une solution pour eviter de devoir créer cette page en plus...
Merci.
Partager