[AJAX] Liste dynamique trop grosse pour un select
Bonjour,
Je souhaite réaliser une page dans laquelle la sélection d'un premier select permet de géréner l'affichage du second.
J'utilise pour cela l'Ajax mais mon problème est le suivant : lorsquel la taille de la liste générée est petite (par exemple 2 éléments), ça fonctionne très bien mais si la taille de la liste est importante (dans mon cas plus de 4000 éléments à afficher), le second select reste tout simplement vide.
Voici des fragments de mon code (je développe une application web en java) :
page jsp : code Ajax : fonction appelée lors du choix dans le 1er select :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| var xhr1;
function getContributorValues(rightcalculationmanagementid){
if (window.XMLHttpRequest) {
xhr1 = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
xhr1 = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr1.open("GET", 'statement.do?actionType=SETCONTRIBUTOR&rightcalculationmanagementid='+rightcalculationmanagementid);
xhr1.onreadystatechange = function() { setContributorValues(xhr1); };
xhr1.send(null);
} |
Fonction appelée pour remplir le second select :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| function setContributorValues(xhr){
if(xhr.readyState == 4 && xhr.status == 200){
var sel = document.getElementById('contributoraccessidF').childNodes[0];
sel.options.length=0;
var groups = xhr.responseXML.getElementsByTagName('contributor');
sel.options[0] = new Option('',0);
for (var i=0;i<groups.length;i++){
name = groups[i].getElementsByTagName('name')[0].firstChild.nodeValue;
value = groups[i].getElementsByTagName('value')[0].firstChild.nodeValue;
sel.options[i+1] = new Option(name,value);
}
}
} |
code java dans ma classe Action pour alimenter la liste :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| StringBuffer sb = new StringBuffer();
sb.append("<?xml version='1.0' encoding='ISO-8859-1'?>");
sb.append("<contributors>");
//La liste contributors peut contenir plus de 4000 éléments
for (Contributor contributor : contributors){
sb.append("<contributor>");
sb.append("<name>").append(contributor.getName()).append("</name>");
sb.append("<value>").append(contributor.getContributorid()).append("</value>");
sb.append("</contributor>");
}
sb.append("</contributors>");
response.addHeader("Content-Type", "text/xml");
response.getWriter().write(sb.toString()); |
Encore une fois, ceci fonctionne parfaitement si la taille de la liste est raisonnable.
Mais alors, comment faut-il faire ?
Merci par avance pour votre aide et/ou suggestions.