status.setComplete()不清除会话

use*_*944 1 java spring spring-mvc spring-3

我想清理一个会话.下面是我编写的一些示例代码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";
}
}
Run Code Online (Sandbox Code Playgroud)

home1显示屏幕,我仍然可以看到会话对象没有得到清除.如果我试试这个:${sessAttr1 }那么我可以在home1屏幕上阅读会话值.

请说明为什么它不起作用.

编辑

<a href="home1">Next</a>用来从一个屏幕导航到另一个屏幕.这与我面临的问题有什么关系吗?

Mat*_*ple 5

setComplete用于在控制器处理请求后将会话属性标记为不需要:它不会立即修改会话,并且整体听起来它不适合您的用例.它旨在用于类似POST的情况,其中数据旨在在当前请求期间使用,但不应在将来使用.

http://forum.spring.io/forum/spring-projects/web/108339-problem-with-sessionattribute-and-sessionstatus

  • 正如你所说:"它没有立即修改会话"我想知道什么时候实际上会话被修改了? (2认同)