当我想在Spring 3中的Session范围中使用模型时,我使用了foll。控制器中的注释: -
@SessionAttribute("myModel");
但是,这只是myModel的声明。它在什么时候被初始化,以便我在View中使用它。 Spring如何知道这个模型的类型?
有人可以用例子来解释这个吗?
答案 0 :(得分:7)
@SessionAttribute
的工作原理如下:
@SessionAttribute
- 带注释的方法)初始化 @ModelAttribute
。
@SessionAttribute
由HTTP参数中的数据更新。
@SessionAttribute
对象上调用setComplete()
作为参数时, SessionStatus
被清除。
示例:
@SessionAttribute("myModel")
@Controller
public class MyController {
@RequestMapping(...)
public String displayForm(@RequestParam("id") long id, ModelMap model) {
MyModel m = findById(id);
model.put("myModel", m); // Initialized
return ...;
}
@RequestMapping(...)
public String submitForm(@ModelAttribute("myModel") @Valid MyModel m,
BindingResult errors, SessionStatus status) {
if (errors.hasErrors()) {
// Will render a view with updated MyModel
return ...;
} else {
status.setComplete(); // MyModel is removed from the session
save(m);
return ...;
}
}
}
答案 1 :(得分:0)
您可以使用@ModelAttribute注释方法,如果属性名称与@SessionAttribute注释中指定的相同,则属性将存储在会话中。这是一个完整的例子:
@Controller
@RequestMapping(value = "/test.htm")
@SessionAttributes("myModel")
public class DeleteNewsFormController {
// Add you model object to the session here
@ModelAttribute("myModel")
public String getResultSet() {
return "Hello";
}
//retreive objects from the session
@RequestMapping(method = RequestMethod.GET)
public @ResponseBody testMethod(@ModelAttribute("resultSet") String test, Model model) {