Spring MVC整理系列(05)————Spring MVC配置解析及整合SpriSpring MVC之@ModelAttribute、@SessionAttributes以及Model的使用介绍
来源:互联网 发布:淘宝怎么抢秒杀 编辑:程序博客网 时间:2024/05/21 09:26
1、Model:存储数据的作用域对象,相当于request
向model中添加数据,方式一,通过addAttribute方法:
@RequestMapping("/save") public String save(Model model,int id,String username) { User user=new User(); //这里是通过反射从request里面拿值再set到user user.setId(id); user.setUsername(username); model.addAttribute("user",user); return "result"; }
向model中添加数据,方式二,通过@ModelAttribute注解的方式
2、@ModelAttribute:作用于方法或参数上的注解,把数据或对象添加进Model对象
作用于方法上:向model中set值。
在一个到达的request中,任何被@ModelAttribute注解的方法都会在controller handler method之前调用,返回值作为数据被添加进model对象中
//如果@ModelAttribute()未指定key,则key默认为方法返回类型名称的首字母小写形式@ModelAttribute("userKey")public User getUser(){ User u =new User(); p.setName("小明"); return u;}@RequestMapping("/save") public String save(Model model) { //后台使用model中的数据 User user = model.asMap().get("userKey");//拿到name为小明的user对象 return "result"; } //前台使用model中数据的方式:var userName = ${userKey.name};
作用于参数上:从model中get值并绑定到参数上。
通过名称对应,把model对象中相应的属性值绑定到注解的参数上,如果model对象中没有此属性,则把request中按名称对应的方式把值绑定到参数上
前台发送一个请求:http://localhost/web/test?testId=123456789@ModelAttribute("testId")public String getTestId(){ return "987654321";}@RequestMapping("/test") public String test(@ModelAttribute("testId") String testId) { //输出 987654321,如果没有上面的getTestId方法,model对象中也就没有testId属性,则使用request中的testId属性值 System.out.println(testId); return "result"; }
3、@SessionAttributes:作用于Controller类,让Controller所有方法共享Model对象中一个或多个属性
再解释明白一点:就是原来model中有一个属性testId,现在在Controller上添加注解@SessionAttributes(“testId”),则所有方法都可以通过model获取该testId属性值
@Controller@SessionAttributes("testId")public class TestController{@ModelAttribute("testId")public String getTestId(){ return "987654321";}@RequestMapping("/test") public String test(Model model) { String testId = model.asMap().get("testId"); System.out.println(testId);//输出 987654321 return "result"; }}
@SessionAttributes有两个属性,value和type,用于指定key和数据类型,可以多值
@SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})
当需要清除通过@SessionAttributes向session当中添加的值得时候,我们只需要在controller的方法中传入一个SessionStatus的类型对象 通过调用setComplete方法就可以清除了。
@RequestMapping("/test")public String test(SessionStatus status) { status.setComplete(); return "result";}
ps:关于ModelAttribute、SessionAttributes与RequestScope、SessionScope的关系,可以参看
理解Spring MVC Model Attribute 和 Session Attribute
,总结就是数据先被保存到model中,然后再拷贝到requestScope中,如果使用了@SessionAttributes注解,同时相应属性被拷贝到sessionScope中。
另外,文中也说了一下关于使用model而不是直接使用request的原因:
- Spring MVC整理系列(05)————Spring MVC配置解析及整合SpriSpring MVC之@ModelAttribute、@SessionAttributes以及Model的使用介绍
- Spring MVC — @SessionAttributes
- Spring MVC整理系列(02)————Spring MVC配置解析及整合Spring IOC
- Spring MVC整理系列(04)————Spring MVC配置解析及整合SprinSpring MVC之@RequestParam @RequestBody @RequestHeader 等详解
- Spring MVC之注解Annonatoin之@SessionAttributes和@ModelAttribute
- Spring MVC 之@ModelAttribute使用
- Spring MVC之@RequestBody, @ResponseBody @PathVariable @SessionAttributes @ModelAttribute详解
- Spring MVC中常用注解之@SessionAttributes @ModelAttribute详解
- Spring MVC 对于@ModelAttribute 、@SessionAttributes 的详细处理流程
- [Spring MVC] - @ModelAttribute使用
- [Spring MVC] - @ModelAttribute使用
- Spring MVC - @ModelAttribute使用
- Spring MVC @ModelAttribute 使用
- spring mvc @ModelAttribute使用
- spring MVC之使用@SessionAttributes时报异常
- spring mvc学习之@SessionAttributes
- spring-mvc数据源配置及modelAttribute注解
- Spring MVC 系列(一)——Spring MVC核心组件及工作流程解析
- 新安装的Centos 7找不到hgfs
- Android 性能优化 二 TraceView工具的使用
- Android自定义弹出框开发-生成Window容器
- 深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
- 【Linux学习笔记】获取文件属性 — stat()、fstat()、lstat()小结
- Spring MVC整理系列(05)————Spring MVC配置解析及整合SpriSpring MVC之@ModelAttribute、@SessionAttributes以及Model的使用介绍
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- 程序、任务、进程和线程的联系与区别
- CornerStone上传静态库(.a文件)
- file_get_contents 无法请求微信https接口的问题
- Hadoop家族系列文章
- mybatis框架(分页的实现)
- flyme by 云 os 系统不显示log解决方法
- LNK1104: 无法打开文件“lua51.lib”