2016-04-15 11 views
0

ich habe Javascript, die eine Funktion ruft den Sitzungswert wiewindow.location.reload (true) wird HttpSession löschen?

unten zu setzen, ist der Client-Code:

<a id="sampleId "href="javascript:confirmTechSimulationSwitch('testLink'); 

function confirmTechSimulationSwitch(){ 
var url = window.location.protocol + "//" + window.location.host + "/dummy-proj/Toggle.jsp"; 
var xmlHttpReq = new XMLHttpRequest(); 
    if (window.XMLHttpRequest) { 
     xmlHttpReq = new XMLHttpRequest(); 
     xmlHttpReq.open("POST",url, false); 
     xmlHttpReq.send(null); 
    } 
    if (xmlHttpReq.readyState == 4) { 
      if (xmlHttpReq.status == 200){ 
       var newResponse =xmlHttpReq.responseText.slice(0,4); 
       if(xmlHttpReq.responseText !=null && newResponse =='true'){ 
      window.location.reload(true); 
       } 
      } 
      } 

Innerhalb dieses Toggle.jsp ich eine MeTHOOD habe:

<% 
System.out.println("inside jsp page"); 

     session.setAttribute("abc","true"); 
     request.setAttribute("abc","true"); 
     request.getSession().setAttribute("abc","true"); 
System.out.println(" abc123........ "+session.getAttribute("abc"));//prints true 
System.out.println("abc456....... "+request.getAttribute("abc"));//prints true 
System.out.println("abc789......."+request.getSession().getAttribute("abc"));//prints true 
    } 
%> 

jetzt Ich versuche, diese Sitzungswerte nach dem Laden der Seite aus der gleichen Anwendung in anderer Methode wie folgt abrufen:

public void Test(HttpServletRequest request){ 
HttpSession session = request.getSession(); 
session.getAttribute("abc");// prints null 
request.getAttribute("abc");//prints null 
request.getSession().getAttribute("abc")//prints null 
    } 

von einer anderen Java-Methode Test. Ich verstehe es als null. kann mir bitte jemand vorschlagen, wie Sie den Sitzungswert, der für abc festgelegt ist, auch nach dem Neuladen der Seite erhalten?

+0

Zeigen Sie Ihren clientseitigen Code an. Wenn Sie die Seite erneut laden, wird die In-Flight-Anforderung vom Click-Handler möglicherweise vom Browser abgebrochen. Laden Sie nicht neu, bevor diese Anfrage (und es ist die Arbeit der Sitzung) abgeschlossen ist. Was ist "ein anderes Java-Programm"? Nicht Teil der gleichen Web-Anwendung (wird dann nicht auf die Sitzung zugreifen)? – Thilo

+0

Ich habe den client side code ebenfalls hinzugefügt, bitte werfen Sie einen Blick –

+0

überprüfen Sie Ihre 'trainingAvailableFlag' prüfen, ob es' wahr 'oder' 1' ist. Fügen Sie in der Ajax-Antwort nur noch else case hinzu und überprüfen Sie die Antwort. – Santhucool

Antwort

0

Zuerst lassen Sie uns den Titel antworten: Nein, es ungültig nicht die Sitzung des Servers Ihr Fehler ist nicht hier.

Zweitens: Was ist der Sinn dieses?

if(res !=null && res =='true'){ 
    var res="true"; 
    [..] 
} 

Es gibt keinen Grund, dies zu tun

Schließlich werden wir definitiv Ihr Problem mehr Informationen, um lösen müssen. Wie die Bedingung, dass Ihr Javascript ausgeführt wird, oder der gesamte HTML-Code um das Javascript, wenn es in der Seite enthalten ist.

+0

Die JavaScript-Funktion ist auf den Link klicken. Wir haben nur einen Link auf den Klick des Links Ich habe diese ConfirmTechSimulationSwitch-Funktion aufgerufen und für if (res! = null & & res == 'wahr') { var res = "wahr"; [..] } Ich habe die Frage bearbeitet –

+0

Aber was ist der Punkt mit var res = "true" und dann window.location.reload()? Da Sie Ihre Seite neu laden, wird der gesamte Javascript-Kontext gelöscht. Wenn Sie die aktuelle Sitzung des Benutzers laden möchten, sollten Sie dies tun, wenn die Seite geladen wird. – Walfrat

+0

Ich habe für einige weitere Logik Zweck hinzugefügt, die keine signifikante für diese aktuelle Variable mit window.location.reload hat –