我正在尝试清除会话。下面是我用SessionStatus
检查的一些示例代码。
@Controller
@SessionAttributes(value={"sessAttr1","sessAttr2","sessAttr3"})
public class SessionController {
@RequestMapping(value="index")
public ModelAndView populateSession(){
ModelAndView modelView = new ModelAndView("home");
modelView.addObject("sessAttr1","This value is added in a session 1");
modelView.addObject("sessAttr2","This value is added in a session 2");
modelView.addObject("sessAttr3","This value is added in a session 3");
return modelView;
}
@RequestMapping(value="home1")
public String populateHomeSession(SessionStatus status){
status.setComplete();
return "home1";
}
}
当显示home1
屏幕时,我仍然可以看到会话对象未被清除。如果我试试这个:${sessAttr1 }
,那么我可以在home1
屏幕中阅读会话值。
请澄清为何不起作用。
修改
我使用<a href="home1">Next</a>
从一个屏幕导航到另一个屏幕。它与我面临的这个问题有关吗?
答案 0 :(得分:5)
setComplete
用于在控制器处理了请求之后将会话属性标记为不需要:它不会立即修改会话,而且整体听起来像#&# 39;适合您的用例。它旨在用于类似POST的情况,其中数据旨在在当前请求期间使用,但不应在将来使用。
答案 1 :(得分:1)
您可以使用invalidate()
@RequestMapping(value="home1")
public String populateHomeSession(HttpservletRequest request){
HttpSession session=request.getSession();
session.invalidate();
return "home1";
}