@SessionAttribute : When is the model initialized?

前端 未结 2 2038
一个人的身影
一个人的身影 2021-01-03 16:16

When I want a model in Session scope in Spring 3, I use the foll. annotation in a Controller:-

    @SessionAttribute(\"myModel\");

However,

2条回答
  •  抹茶落季
    2021-01-03 17:16

    @SessionAttribute works as follows:

    • @SessionAttribute is initialized when you put the corresponding attribute into model (either explicitly or using @ModelAttribute-annotated method).

    • @SessionAttribute is updated by the data from HTTP parameters when controller method with the corresponding model attribute in its signature is invoked.

    • @SessionAttributes are cleared when you call setComplete() on SessionStatus object passed into controller method as an argument.

    Example:

    @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 ...;
            }
    
        }
    }
    

提交回复
热议问题