Bonjour,
je veux afficher les cordonnées du régisseur lors je sélectionne une régie dans une liste déroulante.
Nous utilisons le serveur Tomcat 5.5 et les technologies suivantes : Struts / Spring / Hibernate 3.0 et Oracle...
Dans ma page JSP, j'ai le code javascript suivant : «
».
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 // 1. Propriétés de la classe ajaxObject = null; ajaxAsynchrone = false; ajaxMethode = "GET"; // Création de l'objet XMLHTTpRequest if (window.ActiveXObject) { //Pour Internet Explorer ajaxObject = new ActiveXObject("Microsoft.XMLHTTP") ; } else if (window.XMLHttpRequest) { //Pour FireFox ajaxObject = new XMLHttpRequest(); } else { // Object XMLHttpRequest non supporté pour ce navigateur ajaxObject = null; } // 2. Méthodes de la classe function setAjaxAsynchrone() { ajaxAsynchrone = true; } function setAjaxSynchrone() { ajaxAsynchrone = false; } function setAjaxMethode(m) { if (m=="GET" || m=="POST" || m=="HEAD") { ajaxMethode = m; } }
Ensuite, j'ai la méthode findDebiteurByAjax(page, parametre) qui est appelé lors de la sélection d'une régie dans ma liste déroulante : «
»
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 setAjaxAsynchrone(); setAjaxMethode('POST'); // on passe les informations par la méthode POST // Les deux paramètres sont : // * page : nom de la page appelée // * parametre : paramètre à envoyer à l'action Struts ! function findDebiteurByAjax(page, parametre) { if (ajaxObject != null) { var url = page; // Si la méthode est get et que paramètre contient des données, on ajoute ? l'url if (ajaxMethode == "GET" && parametre != null) { if (parametre != "") { url = url + "?" + parametre; parametre = null; } } // Ouverture de la page dans le mode demandé ajaxObject.open(ajaxMethode, url, ajaxAsynchrone); //Alimente le content une fois la page compl?tement recu ajaxObject.onreadystatechange = function() { // Les données sont complètement accessibles ==> 4 (complet) // Le code HTTP retourné par la requête est Ok ==> 200 if (ajaxObject.readyState == 4) { if (ajaxObject.status == 200) { var res = ajaxObject.responseText; alert(res); } // Force l'arret de tous les scripts javascript // window.event.cancelBubble = true; } } // Si envoi par POST, ... if (ajaxMethode == "POST") { ajaxObject.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); } // Envoi de l'objet au serveur ajaxObject.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); ajaxObject.send(parametre); } }
Je peux maintenant vous présenter mon action Struts : «
».
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 public ActionForward coordDebiteurAssocieToRegie(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { VueCreanceFB fb = (VueCreanceFB)form; VueCreanceGC gc = fb.getVueCreanceGC(); String codeRegie = request.getParameter("codeRegie"); StringBuffer monXML = new StringBuffer(); if ((gc != null) && (codeRegie != null) && (!codeRegie.equals(""))) { //TODO : Lorsque l'on saura récupérer le débiteur/régisseur associée à une régie // on pourra ici compléter l'objet // A voir avec Florence ou Olivier. CreanceAssembler ass = (CreanceAssembler)gc.getAssembler(); IServiceRegie serviceRegie = (IServiceRegie)ass.getServiceRegie(); AdresseRegisseur adrRegisseur = serviceRegie.getAdresseRegisseur(codeRegie); monXML.append("<?xml version=\"1.0\" ?>"); monXML.append("<root>"); if (adrRegisseur == null) { monXML.append("<nomRegisseur></nomRegisseur>"); monXML.append("<adresseRegisseur1></adresseRegisseur1>"); monXML.append("<adresseRegisseur2></adresseRegisseur2>"); monXML.append("<adresseRegisseur3></adresseRegisseur3>"); monXML.append("<adresseRegisseur4></adresseRegisseur4>"); monXML.append("<CPRegisseur></CPRegisseur>"); monXML.append("<VilleRegisseur></VilleRegisseur>"); monXML.append("<identifiantPays>100</identifiantPays>"); } else { monXML.append("<nomRegisseur>" + ((adrRegisseur.getNomOuRaisonSociale() == null)?"":adrRegisseur.getNomOuRaisonSociale()) + "</nomRegisseur>"); monXML.append("<adresseRegisseur1>" + ((adrRegisseur.getAdresseRegisseur1() == null)?"":adrRegisseur.getAdresseRegisseur1()) + "</adresseRegisseur1>"); monXML.append("<adresseRegisseur2>" + ((adrRegisseur.getAdresseRegisseur2() == null)?"":adrRegisseur.getAdresseRegisseur2())+ "</adresseRegisseur2>"); monXML.append("<adresseRegisseur3>" + ((adrRegisseur.getAdresseRegisseur3() == null)?"":adrRegisseur.getAdresseRegisseur3()) + "</adresseRegisseur3>"); monXML.append("<adresseRegisseur4>" + ((adrRegisseur.getAdresseRegisseur4() == null)?"":adrRegisseur.getAdresseRegisseur4())+ "</adresseRegisseur4>"); monXML.append("<CPRegisseur>" + ((adrRegisseur.getCodePostalRegisseur() == null)?"":adrRegisseur.getCodePostalRegisseur()) + "</CPRegisseur>"); monXML.append("<VilleRegisseur>" + ((adrRegisseur.getVilleRegisseur()==null)?"":adrRegisseur.getVilleRegisseur()) + "</VilleRegisseur>"); monXML.append("<identifiantPays>" + (((String)adrRegisseur.getPaysRegisseur()==null)?"":(String)adrRegisseur.getPaysRegisseur()) + "</identifiantPays>"); } // on termine le document XML monXML.append("</root>"); } System.out.println("============="); System.out.println(monXML.toString()); System.out.println("============="); //response.setContentType("application/xml"); response.setContentType("text/html"); response.setHeader("Cache-Control", "no-cache"); PrintWriter out = response.getWriter(); out.println(monXML.toString()); out.flush(); return null; }
Pour le moment, j'essaye de récupérer les informations sous forme de texte en JavaScript. Sous IE, tout fonctionne parfaitement alors que sous Firefox 1.5.0.5, cela marche bien en mode Asynchrone et il ne se passe rien en mode Synchrone.
J'ai beau mettre des alerts dans la déclaration de la fonction associée à la propriété onreadystatechange, il ne se passe rien !!!
Au niveau de la console JavaScript, aucune erreur n'est relevée !
Avez-vous une idée,
Merci d'avance.
Fabien.
Partager