@SessionAttribute:何时初始化模型?


问题内容

当我想在Spring 3的Session作用域中建立模型时,可以使用foll。控制器中的注释:-

    @SessionAttribute("myModel");

但是,这只是myModel的声明。在什么时候初始化它,以便在View中使用它。Spring将如何知道该模型的类类型?

有人可以举例说明吗?


问题答案:

@SessionAttribute 工作方式如下:

  • @SessionAttribute当您将相应的属性放入模型时(明确地或使用@ModelAttribute-annotated方法)初始化。

  • @SessionAttribute 当调用带有签名中相应模型属性的控制器方法时,HTTP参数中的数据会更新。

  • @SessionAttribute当你调用s的清除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 ...;
        }

    }
}