IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] 3 Listes liées (combo) en JSP


Sujet :

AJAX

  1. #1
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Par défaut [AJAX] 3 Listes liées (combo) en JSP
    Bonjour à tous

    je suis entrain de developpez un formulaire en jsp contenant trois listes liées, projet --> tranche --> Groupement.

    j'ai essayé d'adapter la solution proposée dans la discussion suivante : http://www.developpez.net/forums/d77...te-liees-ajax/

    mais cela n'a rien donné, ci aprés les bouts de code que j'ai adapté pour JSP:

    form1.jsp:

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
     
     
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ page import="java.util.Vector,java.util.Enumeration,GC.bean.Bien,
    GC.bean.Projet,GC.bean.Tranche,GC.bean.Groupement,GC.dao.GroupementDAO,
    GC.dao.ProjetDAO,java.util.*" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
     
    <script type='text/javascript'>
    			function getXhr(){
                                    var xhr = null; 
    				if(window.XMLHttpRequest) // Firefox et autres
    				   xhr = new XMLHttpRequest(); 
    				else if(window.ActiveXObject){ // Internet Explorer 
    				   try {
    			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			            } 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;
    			}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton
    			*/
    			function change()
    			{	
    			  //Si c'est AUCUN qui est sélectionné, il faut réinitialiser 
            //les 2 autres combos et quitter
    				var sel = document.getElementById('projet');
    				if (sel.options[sel.selectedIndex].value == -1) {
      					document.getElementById('tranche').options.length=0;
      					document.getElementById('groupement').options.length=0;
      					return;
            }
     
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function()
    				{
    					//attendons dque le requete soit finie...
              if(xhr.readyState == 4 && xhr.status == 200){
                var rst = xhr.responseXML;
      					var items=rst.getElementsByTagName('element');
      					document.getElementById('tranche').options.length=0;
      					//penser à réinitialiser aussi id_ref
                document.getElementById('groupement').options.length=0;
      					for(var i=0;i<items.length;i++)
      					{
      						var myOption = new option(items[i].getElementsByTagName('option')[0].firstChild.nodeValue,items[i].getElementsByTagName('valeur')[0].firstChild.nodeValue,false,true)
      						document.getElementById('tranche').options[i]=myOption;
      					}
     
      					//mise à jour de id_ref pour le 1er prenom affiché (sinon incohérence
                //au niveau de l'affichage)
      					change2();
      				}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","cmbtranche22.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 l'auteur
    				sel = document.getElementById('projet');
    				idprojet = sel.options[sel.selectedIndex].value;
    				xhr.send("idProjet="+idprojet);			
    			}
     
    			function change2()
    			{	
    				//si un seul prenom...	
    				if (document.getElementById('prenom').options.length==1) 
    				{
    					//on vide la derniere combo
    					document.getElementById('groupement').options.length=0; 
    					//on quitte
    					return;
    				}
     
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function()
    				{
    				  if(xhr.readyState == 4 && xhr.status == 200){
      					var rst = xhr.responseXML;
      					var items=rst.getElementsByTagName('element');
      					document.getElementById('groupement').options.length=0;
      					for(var i=0;i<items.length;i++)
      					{
      						var myOption = new Option(items[i].getElementsByTagName('option')[0].firstChild.nodeValue,items[i].getElementsByTagName('valeur')[0].firstChild.nodeValue,false,true)
      						document.getElementById('groupement').options[i]=myOption;
      					}
      				}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","cmbgroupement22.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 l'auteur
     
    				sel2 = document.getElementById('projet');
    				idprojet = sel2.options[sel2.selectedIndex].value;
     
    				sel = document.getElementById('tranche');
    				idtranche = sel.options[sel.selectedIndex].value;
     
    				xhr.send("idTranche="+idtranche + "idProjet="+idprojet);		
    			}
    		</script>
     
    <body onload = 'change()'>
    <form  method="POST" action="NouveauBien">
    			&nbsp;<fieldset style="padding: 2">
    			<legend>Information sur le Bien</legend>
    			<b>Identificateur : <input type="text" name="id_bien" size="20"></b><p>
    			<b>GH :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    			<input type="text" name="gh" size="20"></b></p>
     
    			</fieldset><p>&nbsp;</p>
    			<fieldset style="width: 500px">
    				<legend>Information sur Projet</legend>
     
     
    				<label>Projet</label>
     
    				<select name="projet" onchange='change()'>
     
    <%
                Projet prj = (Projet) application.getAttribute("prj");
                Collection prjs = ProjetDAO.getProjetId();
                if (prjs != null)
                {
                    if (prjs.size() > 0)
                    {
                        for (Iterator iterator = prjs.iterator(); iterator.hasNext(); )
                        {
                            Projet prjts = (Projet) iterator.next ();
     
    %>
     
    <OPTION value ="<%=prjts.getCode_projet()%>">
    <%out.print(prjts.getLibelle());%>
     
    </OPTION> 
    <%
                        }
                    }
                  }            
    %>
    </select>
     
     
    <label>Tranche</label>
    				<div id='tranche' style='display:inline'>
    				<select name="tranche" onchange='change2()'>
     
                      <option value='-1'>Choisir un projet</option>
     
     
    				</select>
    				</div>
     
    <label>Groupement</label>
    				<div id='groupement' style='display:inline'>
    				<select name="groupement">
     
                      <option value='-1'>Choisir un projet ou tranche</option>
     
     
    				</select>
    				</div>
     
    			</fieldset>
     
    <p><b>Superficie : </b>&nbsp;&nbsp;&nbsp;&nbsp;
    			<input type="text" name="superficie" size="20"></p>
    			<p>&nbsp;</p>
    			<p><input type="submit" value="Enregistrer" name="B1"></p>
    			<p>&nbsp;</p>
    			<p>&nbsp;</p>
    		</form>
     
    </body>
    </html>

    cmbtranche22.jsp :

    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
     
     
    <%@ page import="java.util.Vector,java.util.Enumeration,
    GC.bean.Tranche,GC.bean.Projet,GC.dao.TrancheDAO,GC.bean.Groupement,GC.dao.GroupementDAO,java.util.*" %>
     
    <%@ page language="java" contentType="text/xml; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
                 <%
                 out.print("<select name=\"element\">"); 
                Tranche trch = (Tranche) application.getAttribute("trc");
                Collection trchs = TrancheDAO.trch(Integer.parseInt(request.getParameter("idProjet")));
                if (trchs != null)
                {
                    if (trchs.size() > 0)
                    {
                        for (Iterator iterator = trchs.iterator(); iterator.hasNext(); )
                        {
                            Tranche tr = (Tranche) iterator.next ();
     
              out.print("<option value=\""+tr.getCode()+"\">"+tr.getLibelle()+"</option>");
              out.print("<valeur value=\""+tr.getCode()+"\">"+tr.getLibelle()+"</valeur>");
     
              out.print("</select>");
     
                        }
                    }
                }
     
    %>

    cmbgroupement22.jsp:

    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
     
     
    <%@ page import="java.util.Vector,java.util.Enumeration,
    GC.bean.Tranche,GC.bean.Projet,GC.dao.TrancheDAO,GC.bean.Groupement,GC.dao.GroupementDAO,java.util.*" %>
     
    <%@ page language="java" contentType="text/xml; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
                 <%
                 out.print("<select name=\"element\">"); 
                Tranche trch = (Tranche) application.getAttribute("trc");
                Collection ghs = TrancheDAO.gh_Pr_Tr(Integer.parseInt(request.getParameter("idProjet")),Integer.parseInt(request.getParameter("idTranche")));
                if (ghs != null)
                {
                    if (ghs.size() > 0)
                    {
                        for (Iterator iterator = ghs.iterator(); iterator.hasNext(); )
                        {
                            Tranche gg = (Tranche) iterator.next ();
     
              out.print("<option value=\""+gg.getCode()+"\">"+gg.getLibelle()+"</option>");
              out.print("<valeur value=\""+gg.getCode()+"\">"+gg.getLibelle()+"</valeur>");
     
              out.print("</select>");
     
                        }
                    }
                }
     
    %>

    bon je précise que l'extration des données dans mon exemple se fait à partir d'une base de données Mysql en se basant sur des objets DAO J2EE et les beans (tranche et groupement).

    voilà je reste à disposition pour d'autre détails.

    si quelqu'un peut corriger ceci ou me filer une solution pour 3 listes déroulantes pour JSP je lui serais trés reconnaissant

    Merci d'Avance

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour et bienvenue sur Developpez.com

    Tout d'abord, la solution pour 3 listes est la même que pour 2.

    Ensuite, il ne faut pas qu'un id corresponde au name d'un autre élément de la page. Ce n'est pas une erreur en soi, mais IE confondant ID et NAME, ça lui pose un gros problème . Tu as le cas ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <div id='tranche' style='display:inline'>
    <select name="tranche" onchange='change2()'>
    ainsi que dans le select suivant.
    Si vraiment rien ne se passe c'est peut être juste ça le problème.
    Par contre, ton nav devrait te signaler une erreur JS

    Sinon, le problème peut aussi venir du résultat renvoyé par Ajax : est-il correct ?
    Pour vérifier, il suffit de taper l'url appelée par Ajax (paramètres compris) dans la barre d'adresse du nav : tu auras l'affichage de la réponse "brute" pour en vérifier le contenu.

    A+

  3. #3
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Par défaut
    je tiens tout d'abord à te remercier pour ta réponse, en ce qui concerne les remarques que vous avez soulevé, je te rappel que ce qui indiqué dans mes sources est juste une réadaptation de la solution présenté en php via le post suivant : http://www.developpez.net/forums/d77...te-liees-ajax/

    donc moi je n'ai fais que recopier et adapter en fontion de jsp.

    en plus entre la deuxième et la troisième jsp, il y'a une différence coté méthode d'interrogation de la base de données, car une interroge la table tranche et l'autre la table groupement.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par RachidEL Voir le message
    donc moi je n'ai fais que recopier et adapter en fontion de jsp.
    Si le code d'origine fonctionne, c'est que les erreurs proviennent de tes adaptations
    Citation Envoyé par RachidEL Voir le message
    en plus entre la deuxième et la troisième jsp, il y'a une différence coté méthode d'interrogation de la base de données, car une interroge la table tranche et l'autre la table groupement.
    Cela n'a aucun impacte sur le fonctionnement des listes liées : tes sources pourraient être 2 fichiers texte sur le serveur que ça fonctionnerait pareil

    As-tu corrigé les names et id comme indiqué ?
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <div id='div_tranche' style='display:inline'>
    <select name="tranche" id="tranche" onchange='change2()'>
    As-tu vérifié le retour "brut" d'Ajax comme indiqué ?

    A+

  5. #5
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Par défaut
    j'ai appliqué les modifications respectivement sur tranche et sur groupement, toujours rien en résultat...

    j'ai executé egalement la jsp cmbtranche22.jsp directement, ça m'a sortie des erreurs NULL relative au paramètre idProjet.... forcement parce qu'elle n'arrive pas à recevoir ce paramètre "idProjet" censé etre posté par la première jsp (form1.jsp)

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par RachidEL Voir le message
    j'ai executé egalement la jsp cmbtranche22.jsp directement, ça m'a sortie des erreurs NULL relative au paramètre idProjet.... forcement parce qu'elle n'arrive pas à recevoir ce paramètre "idProjet" censé etre posté par la première jsp (form1.jsp)
    Heu ... ben oui, mais comme c'est toi qui appelle la page et non plus Ajax, il faut que tu ajoutes le paramètre dans l'url, sinon le test ne sert à rien
    Refais le test avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin_complet/cmbtranche22.jsp?idProjet=id_d_un_projet
    id_d_un_projet étant l'id d'un projet existant ...

    A+

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    Code JSP : 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
    <%@ page import="java.util.Vector,java.util.Enumeration,
    GC.bean.Tranche,GC.bean.Projet,GC.dao.TrancheDAO,GC.bean.Groupement,GC.dao.GroupementDAO,java.util.*" %>
     
    <%@ page language="java" contentType="text/xml; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
                 <%
                 out.print("<elements>"); 
                Tranche trch = (Tranche) application.getAttribute("trc");
                Collection trchs = TrancheDAO.trch(Integer.parseInt(request.getParameter("idProjet")));
                if (trchs != null)
                {
                    if (trchs.size() > 0)
                    {
                        for (Iterator iterator = trchs.iterator(); iterator.hasNext(); )
                        {
              Tranche tr = (Tranche) iterator.next ();
              out.print("<element>");              
              out.print("<option>"+tr.getCode()+"</option>");
              out.print("<valeur>"+tr.getLibelle()+"</valeur>");
              out.print("</element>");
              
                        }
                    }
                }
              out.print("</elements>");     
    %>

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Le value dans les options ?
    Oui effectivement, ça ne semble pas très "XML" ...

    A+

  9. #9
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Par défaut
    bonjour les amis

    quand j'execute le cmbtranche22.jsp en lui passant le paramètre idProjet, cela fonctionne bien

    mais ça ne marche toujours pas quand j'execute à partir de form1.jsp, on dirait que form1.jsp n'arrive pas à poster les paramètres idProjet et idTranche.

  10. #10
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Par défaut
    j'attend toujours vos réponse !!!

    en faite j'ai corrigé cmbtranche22.jsp et cmbgroupement22.jsp selon ce qu'a indiqué "Andry.aime" et je signale que ces fichiers marchent quand je les execute séparement, par contre quand je lance l'execution à partir de "form1.jsp" les listes tranche et groiupement restent vides...

  11. #11
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Salut,
    Citation Envoyé par RachidEL Voir le message
    j'attend toujours vos réponse !!!
    Reste zen... le bénévolat et la passion de l'informatique ne sont pas incompatibles avec le fait d'avoir un boulot et une vie de famille.
    Citation Envoyé par RachidEL Voir le message
    en faite j'ai corrigé cmbtranche22.jsp et cmbgroupement22.jsp selon ce qu'a indiqué "Andry.aime" et je signale que ces fichiers marchent quand je les execute séparement, par contre quand je lance l'execution à partir de "form1.jsp" les listes tranche et groiupement restent vides...
    Je prends en route la discussion, mais si tu as toujours ce code dans form1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xhr.send("idTranche="+idtranche + "idProjet="+idprojet);
    alors il te manque le & qui sépare les paramètres...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xhr.send("idTranche="+idtranche + "&idProjet="+idprojet);
    ERE

  12. #12
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Par défaut
    bonjour

    j'ai rajouté le caratère "&", ça ne donne toujours rien..

    voici le contenu du form1.jsp aprés modification:

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
     
     
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ page import="java.util.Vector,java.util.Enumeration,GC.bean.Bien,
    GC.bean.Projet,GC.bean.Tranche,GC.bean.Groupement,GC.dao.GroupementDAO,
    GC.dao.ProjetDAO,java.util.*" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
     
    <script type='text/javascript'>
    			function getXhr(){
                                    var xhr = null; 
    				if(window.XMLHttpRequest) // Firefox et autres
    				   xhr = new XMLHttpRequest(); 
    				else if(window.ActiveXObject){ // Internet Explorer 
    				   try {
    			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			            } 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;
    			}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton
    			*/
    			function change()
    			{	
    			  //Si c'est AUCUN qui est sélectionné, il faut réinitialiser 
            //les 2 autres combos et quitter
    				var sel = document.getElementById('projet');
    				if (sel.options[sel.selectedIndex].value == -1) {
      					document.getElementById('tranche').options.length=0;
      					document.getElementById('groupement').options.length=0;
      					return;
            }
     
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function()
    				{
    					//attendons dque le requete soit finie...
              if(xhr.readyState == 4 && xhr.status == 200){
                var rst = xhr.responseXML;
      					var items=rst.getElementsByTagName('element');
      					document.getElementById('tranche').options.length=0;
      					//penser à réinitialiser aussi id_ref
                document.getElementById('groupement').options.length=0;
      					for(var i=0;i<items.length;i++)
      					{
      						var myOption = new Option(items[i].getElementsByTagName('option')[0].firstChild.nodeValue,items[i].getElementsByTagName('valeur')[0].firstChild.nodeValue,false,true)
      						document.getElementById('tranche').options[i]=myOption;
      					}
     
      					//mise à jour de id_ref pour le 1er prenom affiché (sinon incohérence
                //au niveau de l'affichage)
      					change2();
      				}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","cmbtranche22.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 l'auteur
    				sel = document.getElementById('projet');
    				idprojet = sel.options[sel.selectedIndex].value;
    				xhr.send("idProjet="+idprojet);			
    			}
     
    			function change2()
    			{	
    				//si un seul prenom...	
    				if (document.getElementById('prenom').options.length==1) 
    				{
    					//on vide la derniere combo
    					document.getElementById('groupement').options.length=0; 
    					//on quitte
    					return;
    				}
     
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function()
    				{
    				  if(xhr.readyState == 4 && xhr.status == 200){
      					var rst = xhr.responseXML;
      					var items=rst.getElementsByTagName('element');
      					document.getElementById('groupement').options.length=0;
      					for(var i=0;i<items.length;i++)
      					{
                 var myOption = new Option(items[i].getElementsByTagName('option')[0].firstChild.nodeValue,items[i].getElementsByTagName('valeur')[0].firstChild.nodeValue,false,true)
      						document.getElementById('groupement').options[i]=myOption;
      					}
      				}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","cmbgroupement22.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 l'auteur
     
    				sel2 = document.getElementById('projet');
    				idprojet = sel2.options[sel2.selectedIndex].value;
     
    				sel = document.getElementById('tranche');
    				idtranche = sel.options[sel.selectedIndex].value;
     
    				xhr.send("idProjet="+idprojet+ "&idTranche="+idtranche);		
    			}
    		</script>
     
    <body onload = 'change()'>
    <form  method="POST" action="NouveauBien">
    			&nbsp;<fieldset style="padding: 2">
    			<legend>Information sur le Bien</legend>
    			<b>Identificateur : <input type="text" name="id_bien" size="20"></b><p>
    			<b>GH :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    			<input type="text" name="gh" size="20"></b></p>
     
    			</fieldset><p>&nbsp;</p>
    			<fieldset style="width: 500px">
    				<legend>Information sur Projet</legend>
     
     
    				<label>Projet</label>
     
    				<select name="projet" id='projet' onchange='change()'>
     
    <%
                Projet prj = (Projet) application.getAttribute("prj");
                Collection prjs = ProjetDAO.getProjetId();
                if (prjs != null)
                {
                    if (prjs.size() > 0)
                    {
                        for (Iterator iterator = prjs.iterator(); iterator.hasNext(); )
                        {
                            Projet prjts = (Projet) iterator.next ();
     
    %>
     
    <OPTION value ="<%=prjts.getCode_projet()%>">
    <%out.print(prjts.getLibelle());%>
     
    </OPTION> 
    <%
                        }
                    }
                  }            
    %>
    </select>
     
     
    <label>Tranche</label>
    				<div id='tranche' style='display:inline'>
    				<select name="tranche" id='tranche' onchange='change2()'>
     
                      <option value='-1'>Choisir un projet</option>
     
     
    				</select>
    				</div>
     
    <label>Groupement</label>
    				<div id='groupement' style='display:inline'>
    				<select name="groupement" id='groupement'>
     
                      <option value='-1'>Choisir un projet ou tranche</option>
     
     
    				</select>
    				</div>
     
    			</fieldset>
     
    <p><b>Superficie : </b>&nbsp;&nbsp;&nbsp;&nbsp;
    			<input type="text" name="superficie" size="20"></p>
    			<p>&nbsp;</p>
    			<p><input type="submit" value="Enregistrer" name="B1"></p>
    			<p>&nbsp;</p>
    			<p>&nbsp;</p>
    		</form>
     
    </body>
    </html>
    et voici le contenu de cmbtranche22.jsp :

    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
     
     
    <%@ page import="java.util.Vector,java.util.Enumeration,
    GC.bean.Tranche,GC.bean.Projet,GC.dao.TrancheDAO,GC.bean.Groupement,GC.dao.GroupementDAO,java.util.*" %>
     
    <%@ page language="java" contentType="text/xml; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
                 <%
                 out.print("<elements>"); 
                Tranche trch = (Tranche) application.getAttribute("trc");
                Collection trchs = TrancheDAO.trch(Integer.parseInt(request.getParameter("idProjet")));
                if (trchs != null)
                {
                    if (trchs.size() > 0)
                    {
                        for (Iterator iterator = trchs.iterator(); iterator.hasNext(); )
                        {
                            Tranche tr = (Tranche) iterator.next ();
     
              out.print("<element>");              
              out.print("<option>"+tr.getCode()+"</option>");
              out.print("<valeur>"+tr.getLibelle()+"</valeur>");
              out.print("</element>");
     
                        }
                    }
                }
                out.print("</elements>");              
    %>
    et en fin le contenu de cmbgroupement22.jsp :

    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
     
     
    <%@ page import="java.util.Vector,java.util.Enumeration,
    GC.bean.Tranche,GC.bean.Projet,GC.dao.TrancheDAO,GC.bean.Groupement,GC.dao.GroupementDAO,java.util.*" %>
     
    <%@ page language="java" contentType="text/xml; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
                 <%
                 out.print("<elements>"); 
                Tranche trch = (Tranche) application.getAttribute("trc");
                Collection ghs = TrancheDAO.gh_Pr_Tr(Integer.parseInt(request.getParameter("idProjet")),Integer.parseInt(request.getParameter("idTranche")));
                if (ghs != null)
                {
                    if (ghs.size() > 0)
                    {
                        for (Iterator iterator = ghs.iterator(); iterator.hasNext(); )
                        {
                            Tranche gg = (Tranche) iterator.next ();
              out.print("<element>");           
              out.print("<option>"+gg.getCode()+"</option>");
              out.print("<valeur>"+gg.getLibelle()+"</valeur>");
     
              out.print("</element>");
     
                        }
                    }
                }
                out.print("</elements>");
    %>

    Merci d'avance

  13. #13
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Re,
    Essaie de faire alert pour voir ce que le serveur retourne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(xhr.readyState == 4 && xhr.status == 200){
    alert(xhr.responseText);}
    Sinon installe Firebug et décrit l'erreur retourné.

  14. #14
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Par défaut
    RE Andry

    j'ai mis alert(xhr.responseXML);

    lors de l'execution j'ai un message qui dit : [object]

    voilà

  15. #15
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Euh
    xhr.responseText mais pas xhr.responseXML.

  16. #16
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Par défaut
    Ok ok désolé .....

    aprés avoir mis alert(xhr.responseText), voilà qu'est ce que cela a donné en pièce jointe.
    Images attachées Images attachées  

  17. #17
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Ok,
    Tu as des id qui se répètent, un id doit être unique dans une page.
    <div id='tranche' style='display:inline'>
    <select name="tranche" id='tranche' onchange='change2()'>
    Vérifie tout et adapte ton javascript avec.

  18. #18
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Re,

    @RachidEL: juste pour info, E.Bzz avait déjà remonté ce souci il y a 4 jours.
    As-tu corrigé les names et id comme indiqué ?
    Un exemple :
    Code :

    <div id='div_tranche' style='display:inline'>
    <select name="tranche" id="tranche" onchange='change2()'>

    As-tu vérifié le retour "brut" d'Ajax comme indiqué ?
    Tu as aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <div id='groupement' style='display:inline'>
    <select name="groupement" id='groupement'>
    ERE

  19. #19
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    As-tu corrigé les names et id comme indiqué ?
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <div id='div_tranche' style='display:inline'>
    <select name="tranche" id="tranche" onchange='change2()'>
    @RachidEL : si tu ne fais pas les corrections au fur et à mesure, ça va être difficile d'avancer

    EDIT : double rappel, donc

    A+

  20. #20
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 22
    Par défaut
    correction effectuée au niveau des id, toujours rien...

    voici mon form1.jsp aprés modif :

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
     
     
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ page import="java.util.Vector,java.util.Enumeration,GC.bean.Bien,
    GC.bean.Projet,GC.bean.Tranche,GC.bean.Groupement,GC.dao.GroupementDAO,
    GC.dao.ProjetDAO,java.util.*" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
     
    <script type='text/javascript'>
    			function getXhr(){
                                    var xhr = null; 
    				if(window.XMLHttpRequest) // Firefox et autres
    				   xhr = new XMLHttpRequest(); 
    				else if(window.ActiveXObject){ // Internet Explorer 
    				   try {
    			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			            } 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;
    			}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton
    			*/
     
    			function change()
    			{	
    			  //Si c'est AUCUN qui est sélectionné, il faut réinitialiser 
            //les 2 autres combos et quitter
    				var sel = document.getElementById('projet');
    				if (sel.options[sel.selectedIndex].value == -1) {
      					document.getElementById('tranche').options.length=0;
      					document.getElementById('groupement').options.length=0;
      					return;
            }
     
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function()
    				{
    					//attendons dque le requete soit finie...
              if(xhr.readyState == 4 && xhr.status == 200){
                  //alert(xhr.responseText);
                var rst = xhr.responseXML;
      					var items=rst.getElementsByTagName('element');
      					document.getElementById('tranche').options.length=0;
      					//penser à réinitialiser aussi id_ref
                document.getElementById('groupement').options.length=0;
      					for(var i=0;i<items.length;i++)
      					{
      						var myOption = new Option(items[i].getElementsByTagName('option')[0].firstChild.nodeValue,items[i].getElementsByTagName('valeur')[0].firstChild.nodeValue,false,true)
      						document.getElementById('tranche').options[i]=myOption;
      					}
     
      					//mise à jour de id_ref pour le 1er prenom affiché (sinon incohérence
                //au niveau de l'affichage)
      					change2();
      				}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","cmbtranche22.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 l'auteur
    				sel = document.getElementById('projet');
    				idprojet = sel.options[sel.selectedIndex].value;
    				xhr.send("idProjet="+idprojet);			
    			}
     
    			function change2()
    			{	
    				//si un seul prenom...	
    				if (document.getElementById('prenom').options.length==1) 
    				{
    					//on vide la derniere combo
    					document.getElementById('groupement').options.length=0; 
    					//on quitte
    					return;
    				}
     
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function()
    				{
    				  if(xhr.readyState == 4 && xhr.status == 200){
    					 // alert(xhr.responseText);
    					  var rst = xhr.responseXML;
      					var items=rst.getElementsByTagName('element');
      					document.getElementById('groupement').options.length=0;
      					for(var i=0;i<items.length;i++)
      					{
                 var myOption = new Option(items[i].getElementsByTagName('option')[0].firstChild.nodeValue,items[i].getElementsByTagName('valeur')[0].firstChild.nodeValue,false,true)
      						document.getElementById('groupement').options[i]=myOption;
      					}
      				}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","cmbgroupement22.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 l'auteur
     
    				sel2 = document.getElementById('projet');
    				idprojet = sel2.options[sel2.selectedIndex].value;
     
    				sel = document.getElementById('tranche');
    				idtranche = sel.options[sel.selectedIndex].value;
     
    				xhr.send("idProjet="+idprojet+ "&idTranche="+idtranche);		
    			}
    		</script>
     
    <body onload='change()'>
    <form  method="POST" action="NouveauBien">
    			&nbsp;<fieldset style="padding: 2">
    			<legend>Information sur le Bien</legend>
    			<b>Identificateur : <input type="text" name="id_bien" size="20"></b><p>
    			<b>GH :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    			<input type="text" name="gh" size="20"></b></p>
     
    			</fieldset><p>&nbsp;</p>
    			<fieldset style="width: 500px">
    				<legend>Information sur Projet</legend>
     
     
    				<label>Projet</label>
     
    				<select name="projet" id='projet' onchange='change()'>
     
    <%
                Projet prj = (Projet) application.getAttribute("prj");
                Collection prjs = ProjetDAO.getProjetId();
                if (prjs != null)
                {
                    if (prjs.size() > 0)
                    {
                        for (Iterator iterator = prjs.iterator(); iterator.hasNext(); )
                        {
                            Projet prjts = (Projet) iterator.next ();
     
    %>
     
    <OPTION value ="<%=prjts.getCode_projet()%>">
    <%out.print(prjts.getLibelle());%>
     
    </OPTION> 
    <%
                        }
                    }
                  }            
    %>
    </select>
     
     
    <label>Tranche</label>
    				<div id='tranche' style='display:inline'>
    				<select name='tranche' onchange='change2()'>
     
                      <option value='-1'>Choisir un projet</option>
     
     
    				</select>
    				</div>
     
    <label>Groupement</label>
    				<div id='groupement' style='display:inline'>
    				<select name='groupement'>
     
                      <option value='-1'>Choisir un projet ou tranche</option>
     
     
    				</select>
    				</div>
     
    			</fieldset>
     
    <p><b>Superficie : </b>&nbsp;&nbsp;&nbsp;&nbsp;
    			<input type="text" name="superficie" size="20"></p>
    			<p>&nbsp;</p>
    			<p><input type="submit" value="Enregistrer" name="B1"></p>
    			<p>&nbsp;</p>
    			<p>&nbsp;</p>
    		</form>
     
    </body>
    </html>

Discussions similaires

  1. Listes liées dans une JSP - Java & Ajax
    Par Gwen_59 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/04/2012, 14h34
  2. [AJAX] deux listes liées
    Par kawther dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/04/2007, 13h15
  3. [AJAX] Trois listes liées
    Par jason69 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/03/2007, 20h23
  4. [AJAX] plusieurs listes liées
    Par highman dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/03/2007, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo