[AJAX] listes liées en utilisant une JSP
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:
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:
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:
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:
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.