我在这里看到很多关于删除会话属性的问题,这很好,但它不是我想要的。也许我误解了这个。
问题: 我在一个会话中发送两个ajax请求。 当我首先发送ajax-request“RequestA”时,我的属性“AtributeA”将被删除。我知道,在hattpSession中它不再被列出了。 当我向其他处理程序发送第二个ajax-request“RequestB”时,我仍然看到我的属性“AtributeA”。即使来自此对象的哈希值也与“RequestA”中的哈希值相同。也许我犯了错误或者这是正常行为?
我的代码首先使用Requestmapping的ajax-request:“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");
}
}
我的代码使用Requestmapping的第二个ajax-request:“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?
}
}
答案 0 :(得分:1)
检查此弹簧文档,它将清除您的问题。
<强> org.springframework.web.bind.annotation.SessionAttributes 强>
注释,指示特定处理程序使用的会话属性。 这通常会列出应该透明地存储在模型中的模型属性的名称 会话或一些会话存储,作为表单支持bean。在类型级别声明, 应用于带注释的处理程序类操作的模型属性。 注意:使用此注释指示的会话属性对应于特定处理程序的模型 属性,透明地存储在会话会话中。这些属性将是 处理程序指示其会话会话完成后删除。因此,请使用此 用于此类会话属性的工具,应该临时存储在会话中 在特定处理程序的对话过程中。 对于永久会话属性,例如用户身份验证对象,使用传统 而是session.setAttribute方法。或者,考虑使用属性管理 通用org.springframework.web.context.request.WebRequest接口的功能。 注意:使用控制器接口(例如,用于AOP代理)时,请确保始终如一地使用控制器接口 您的映射注释 - 例如@RequestMapping和@SessionAttributes - on 控制器接口而不是实现类。 以来: 2.5 作者: Juergen Hoeller Sam Brannen
如果您觉得有用,请将其标记为有用。 #happycoding