@ModelAttribute和@SessionAttribute

如果希望将方法入参对象添加到模型中,则仅需在入参前使用@ModelAttribute注解
在方法定义上使用@ModelAttribute注解,SpringMVC在调用目标处理方法前,会逐个调用在方法上标注了@ModelAttribute注解的方法,并将这些方法的返回值添加到模型中,此时方法入参再用@ModelAttribute修饰则HTTP请求消息进一步覆盖模型中对象
SpringMVC在调用方法前会创建一个隐含的模型对象,作为模型数据的存储容器—隐含模型。如果处理方法的入参为map或Model类型,则SpringMVC会将隐含模型的引用传递给这些入参。在方法中,可以通过这个入参对象访问到模型中的数据,也可以向模型中添加新的属性数据
如果希望在多个请求中共享某个模型属性数据,则可以在控制器类中标注一个@SessionAttribute,SpringMVC会将模型中对应的属性暂存到HttpSession中
sessionStatus.setComplete让SpringMVC清除本处理器对应的会话属性
SpringMVC对@ModelAttribute及@SessionAttribute处理流程
1、SpringMVC在调用方法前,在请求线程中创建一个隐含的模型对象
2、调用所有标注了@ModelAttribute的方法,并将方法返回值添加到隐含模型中
3、查看Session中是否存在类上标注的@SessionAttribute的属性,有则添加覆盖
4、标注了入参@ModelAttribute方法若与@SessionAttribute相同若隐含模型中没有则报错,若不相同则创建实例


版权声明:本文为grow_up_footstep原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。