2017-10-06 1 views
0

Ich sah hier eine Menge Probleme über das Löschen von Session-Attribute, die gut funktioniert, aber es ist nicht das, was ich will. Vielleicht verstehe ich das falsch.Spring MVC Sitzung löschen Attribut über mehrere Anfragen

Problem: Ich sende zwei Ajax-Anfragen über eine Sitzung. Wenn ich die erste Ajax-Anfrage "RequestA" sende, wird mein Attribut "AtributeA" gelöscht. Ich sehe, dass es innerhalb von hatpSession nicht mehr aufgelistet ist. Wenn ich die zweite Ajax-Anfrage "RequestB" an einen anderen Handler sende, sehe ich immer noch mein Attribut "AtributeA". Sogar der Hash-Wert von diesem Objekt ist der gleiche wie in "RequestA". Vielleicht mache ich etwas falsch oder es ist normales Verhalten?

My-Code von erster Ajax-Anfrage mit Requestmapping: "routeA":

@Controller 
@SessionAttributes({"ObjectAA"}){ 
     @RequestMapping("/routeA") 
     public handlerAA(HttpSession session){ 
       session.removeAttribute("ObjektAA"); //Attribute will be deleted as expected 
     } 

     @RequestMapping("/routeB") 
     public handlerBB(HttpSession session){ 
       session.getAttribute("ObjektAA"); 
     } 
} 

My-Code durch eine zweite Ajax-Anfrage mit Requestmapping: "Weg b":

@Controller 
@SessionAttributes({"ObjectAA"}){ 
     @RequestMapping("/routeA") 
     public handlerAA(HttpSession session){ 
       session.removeAttribute("ObjectAA"); 
     } 


     @RequestMapping("/routeB") 
     public handlerBB(HttpSession session){ 
       session.getAttribute("ObjectAA"); //ObjectAA is still in the session? how could it be? 
     } 
} 

Antwort

1

prüft in diesem Frühjahr Dokument Es wird dein Problem lösen.

org.springframework.web.bind.annotation.SessionAttributes

Annotation, der die Sitzung gibt Attribute, die eine bestimmte Prozedur verwendet. In diesem Fall werden normalerweise die Namen der Modellattribute aufgelistet, die transparent in der -Sitzung oder einem Konversationsspeicher gespeichert werden und als Formular-Backing-Beans dienen sollen. Auf der Typenebene deklariert, die auf die Modellattribute angewendet wird, für die die mit Annotationen versehene Handler-Klasse arbeitet. HINWEIS: Sitzungsattribute, wie mit dieser Anmerkung angegeben, entsprechen den spezifischen Attributen eines Handlers und werden transparent in einer Konversationssitzung gespeichert. Diese Attribute werden entfernt, sobald der Handler die Beendigung seiner Konversationssitzung anzeigt. Verwenden Sie daher diese Einrichtung für solche Konversationsattribute, die während der Konversation eines bestimmten Handlers vorübergehend in der Sitzung gespeichert werden sollen. Für permanente Sitzungsattribute, z.B. ein Benutzerauthentifizierungsobjekt, verwenden Sie stattdessen die traditionelle Methode session.setAttribute. Alternativ können Sie die Attributverwaltung der generischen Schnittstelle org.springframework.web.context.request.WebRequest verwenden. HINWEIS: Wenn der Controller Schnittstellen (zum Beispiel für AOP Proxying), stellen Sie sicher, konsequent alle Ihre Mapping-Annotationen — wie @RequestMapping und @SessionAttributes — auf die Controller-Schnittstelle als auf der Implementierungsklasse eher zu setzen. seit: 2.5 Autor: Jürgen Höller Sam Brannen

Wenn Sie es hilfreich Marke es als hilfreich. #happycoding

+0

Ok, es bedeutet, das ist normales Verhalten, dass Attribute nur auf bestimmten Handler entfernt werden, und nicht auf der ganzen Browser-Sitzung, bis der Browser geschlossen ist oder ich mich ausgeloggt habe. ja –

+0

, es ist ein normales Verhalten –

+0

hhmm .... ich nur diese Dokumentation sehen, und ich bin verwirrt jetzt: Mit @SessionAttributes zum Speichern von Modellattributen in der HTTP-Sitzung ** ** zwischen Anfragen https: // docs. spring.io/spring/docs/3.2.x/spring-framework-referenz/html/mvc.html # mvc-ann-sessionattrib Das ist, was ich brauche, undede von verschiedenen Anfragen, um mein Sestion-Attribut abzurufen. –

Verwandte Themen