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.