@SessionAttributes 在什么具体情况下会被清除?当尝试在页面中使用两个模型时,我发现了一些令人困惑的行为。
当我使用此控制器执行 GET 操作并随后执行 POST 操作时...
@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";
}
}
...object2 从模型中清除。它不再作为 @SessionAttribute 存在,并且无法在我的视图页面上访问。
但是,如果第二个方法的签名修改为这样......
public String post(@ModelAttribute(value = "object1") Object1 object1,
@ModelAttribute(value = "object2") Object2 object2) {
...然后 object2 不会从模型中清除,并且可以在我的视图页面上使用。
@SessionAttributes 的 javadoc 说:
...属性将被删除一次
处理程序指示完成
它的对话会话。
但我不明白如何在第一个示例中指示会话会话完成,而在第二个示例中则不然。
任何人都可以解释这种行为还是这是一个错误?