Bonjour,
Je développe actuellement une portlet sous Liferay 6.0.3 permettant de faire de la restitution. (Introduction : ça c'est fait !)
Mon problème est le suivant :
Dans mon mode view, j'ai une liste déroulante. Quand je change la sélection, j'effectue une requête sur le serveur pour afficher un tableau suivant des données, donc en ajax, qui fonctionne parfaitement !
J'essaie maintenant de faire à peu près la même chose, c'est-à-dire une requête vers le serveur sur l'événement onchange pour sauvegarder la sélection dans les préférences de la portlet.
Voici mon code : (regarder la fonction updatePreference)
requête ajax :
ma jsp appelée :
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 function updateTableResults(envId, appName) { if (envId.value != 0) { var url = rsJSPFolder+'/dynamic_request/dynamic_request_results_services_tests.jsp'; url = url+'?idEnv='+envId.value+'&nameApp='+appName; var controlId = document.getElementById(rsIdTable); rsInit(url, controlId); } } function updatePreference(preferenceName, preferenceValue) { if (preferenceName != undefined && preferenceValue != undefined) { var url = rsJSPFolder+'/dynamic_request/setPreference.jsp'; url = url+'?preferenceName='+preferenceName+'&preferenceValue='+preferenceValue; rsInitUP(url); } } function rsInit(url, controlId) { var xhr = GetXhr(); if (xhr == null) { alert("Your browser doesn't support XMLHttpRequest!"); return; } xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { // évaluation du message JSON (eval()) var tableauValeurs = eval("(" + xhr.responseText + ")"); // Si la requête s'est bien effectuée, on met à jour la liste des méthodes updateTable(controlId, tableauValeurs); } }; xhr.open('GET',url,true); xhr.send(null); } function rsInitUP(url) { var xhr = GetXhr(); if (xhr == null) { alert("Your browser doesn't support XMLHttpRequest!"); return; } xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { var tableauValeurs = eval("(" + xhr.responseText + ")"); } }; xhr.open('GET',url,true); xhr.send(null); } function GetXhr() { var xhr; try { // Firefox, Opera 8.0+, Safari xhr = new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } } return xhr; }
Ceci ne fonctionne pas... J'ai donc essayé avec une session avec le code en commentaire, qui ne fonctionne pas non plus... Ou plutôt, quand je fais un getValue dans la même jsp et que je le retourne au format JSON, ça fonctionne, mais si je fais le getValue dans ma portlet, ça ne fonctionne pas, donc je suppose que la jsp de ma portlet et celle de ma requête ne sont pas dans la même session mais pourquoi et comment régler ce problème ?
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 <%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> <portlet:defineObjects /> <% response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 response.setHeader("Pragma","no-cache"); //HTTP 1.0 response.setDateHeader ("Expires", 0); //prevents caching at the proxy server String name = request.getParameter("preferenceName"); String value = request.getParameter("preferenceValue"); javax.portlet.PortletPreferences prefs = renderRequest.getPreferences(); prefs.setValue(name, value); prefs.store(); //request.setAttribute(name, value); //String testvalue = (String)request.getAttribute(name); //out.print("[{\"text\":\""+name+"\", \"value\": \""+value+"\"}]"); %>
De préférence, je préfèrerais le faire avec les préférences de la portlet (première solution exposé ici), mais si une solution fonctionnelle existe en session je suis bien évidemment preneur !![]()
Partager