在什么确切的情况不@SessionAttributes被清除? 我发现试图在一个页面中使用两种模式,当一些容易混淆的行为。
当我做一个GET,接着使用该控制器通过后...
@Controller
@RequestMapping("/myPage*")
@SessionAttributes(value = {"object1", "object2"})
public class MyController {
@RequestMapping(method = RequestMethod.GET)
public String get(Model model) {
model.addAttribute("object1", new Object1());
model.addAttribute("object2", new Object2());
return "myPage";
}
@RequestMapping(method = RequestMethod.POST)
public String post(@ModelAttribute(value = "object1") Object1 object1) {
//do something with object1
return "myPage";
}
}
...对象2会从模型清除。 它不再作为一个@SessionAttribute,不能我的视图页面上访问。
但是,如果第二个方法的签名修改成这样...
public String post(@ModelAttribute(value = "object1") Object1 object1,
@ModelAttribute(value = "object2") Object2 object2) {
......那么对象2不会被从模型中清除,可我的视图页面上。
对于@SessionAttributes的Javadoc说:
......一旦处理程序指示其对话会议结束后的属性将被删除。
但我不知道我是如何在第一个例子,但不是在第二个例子中所示的对话会议上完成。
任何人都可以解释这种现象或者是一个错误吗?