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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.