Spring MVC会话删除多个请求属性

Spring MVC会话删除多个请求属性

问题描述:

我在这里看到很多关于会话属性删除的问题,这很好,但它不是我想要的。也许我误解了这一点。Spring MVC会话删除多个请求属性

问题: 我通过一个会话发送两个ajax请求。 当我发送第一个Ajax请求“RequestA”时,我的属性“AtributeA”将被删除。我看到,在hattpSession中它不再被列出。 当我发送第二个Ajax请求“RequestB”给其他一些处理程序时,我仍然看到我的属性“AtributeA”。即使这个对象的散列值与“RequestA”中的相同。也许我做错了什么或者这是正常的行为?

我的代码由第一AJAX请求与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"); 
     } 
} 

我的代码由第二AJAX请求与Requestmapping: “routeB”:

@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? 
     } 
} 

检查这个春天文件,它会清除你的问题。

org.springframework.web.bind.annotation.SessionAttributes

注释指出会话属性是特定的处理器使用。 这通常会列出模型属性的名称,这些属性应该透明地存储在 会话或某些会话存储中,作为表单支持bean。在类型级声明, 应用于注释处理程序类操作的模型属性。 注意:使用此注释表示的会话属性对应于特定处理程序的模型 属性,透明地存储在会话会话中。一旦处理程序指示其会话会话完成,将删除那些属性为 。因此,使用这个 工具来处理这样的会话属性,这些属性在特定处理程序的对话过程中应该临时存储在会话中 。 对于永久会话属性,例如一个用户认证对象,改用传统的 session.setAttribute方法。或者,考虑使用泛型org.springframework.web.context.request.WebRequest接口的属性管理 功能。 注意:当使用控制器接口(例如,用于AOP代理),确保始终如一地把所有 你映射的注释—如@RequestMapping和 控制器接口,而不是实现类@SessionAttributes —。 因为: 2.5 作者: 克林斯曼Hoeller 山姆Brannen

如果你发现它有助于将其标记为有帮助的。 #happycoding

+0

好吧,这意味着,这是正常的行为,只有在特定的处理程序,而不是整个浏览器会话,直到浏览器关闭或我已注销,属性将被删除。 –

+0

是的,这是正常的行为 –

+0

HHMM ....我只是看到这个文件,我现在很困惑:在HTTP会话** 使用@SessionAttributes存储模型属性**请求 之间的https://文档。 spring.io/spring/docs/3.2。x/spring-framework-reference/html/mvc.html#mvc-ann-sessionattrib 那就是我需要的,取消不同的请求来检索我的sesstion-attribute。 –