Springmvc 处理数据模型(三)
来源:互联网 发布:13是什么意思网络语言 编辑:程序博客网 时间:2024/05/20 01:11
Spring MVC 有以下几种方式输出模型数据:
- ModelAndView:处理方法返回值类型为 ModelAndView时,方法体即可通过该对象添加模型数据;
- Map 及 Model :入参为org.springframework.ui.Model、org.springframework.ui.ModelMap 或 Java.uti.Map 时,处理方法返回时,Map中的数据会自动添加到模型中;
- @SessionAttributes:将模型中的某个属性暂存到 HttpSession 中,以便多个请求可以共享这个属性;
- @ModelAttribute:方法入参标注该注解后,入参的对象就会自动放到数据模型中
一、ModelAndView
控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。
添加模型数据:
- ModelAndView addObject(String attributeName, Object attributeValue)
- ModelAndView addAllObject(Map<String, ?> modelMap)
设置视图:
- void setView(View view)
- void setViewName(String viewName)
@RequestMapping("/handle3")public ModelAndView handle3() { ModelAndView view = new ModelAndView(); view.setViewName("success"); view.addObject("name", "crystal"); view.addObject("age", 20); return view;}
说明:SpringMVC会把ModelAndView中的Model中的数据方法Request域对象中。
二、Map及Model
下面传入的 Map 实际是BindingAwareModelMap,所以我们定义参数用Map即可。
@RequestMapping("/testModelAndMap")public String testModelAndMap(Map<Object, Object> map) { map.put("age", 20); return "success";}
Spring MVC 在内部使用了一个org.springframework.ui.Model 接口存储模型数据。
Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
如果方法的入参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据。
注意:这里初始化map之后里面会将 检查有没有 @ModelAttribute 方法 和@SessionAttribute 存储的信息,若果有会将信息保存到 map里面
三、@SessionAttributes
若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 @SessionAttributes,SpringMVC将在模型中对应的属性暂存到 HttpSession 中。
@SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中
- @SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。
- @SessionAttributes(value={“user”,”admin”})
- @SessionAttributes(types={User.class, Department.class})
- @SessionAttributes(value={“user”,”admin”}, types={User.class})
@Controller@SessionAttributes("user")public class Test { @RequestMapping("/testSessionAttributes") public String testSessionAttributes(Map<Object, Object> map) { User user = new User(); user.setAge(23); user.setName("crystal"); map.put("user", user); return "success"; }}
页面显示
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><!DOCTYPE><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body> success<br> sessionScope:${sessionScope.user }<br> requestScope:${requestScope.user }<br></body></html>
结果:
successsessionScope:name:crystal, age:23requestScope:name:crystal, age:23
注意:如果在处理定义处标注了 @SessionAttributes(“xxx”),则会从回话中尝试获取该属性,并将其赋给入参,然后再用请求消息填充该入参对象,如果在回话中找不到对应的属性则会抛出 HttpSessionRequiredException 异常。
四、@ModelAttribute
作用:
①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用;
②暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping 注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;
③暴露@RequestMapping 方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。
4.1 绑定请求参数到指定对象 (参数)
public String test1(@ModelAttribute("user") UserModel user)
只是此处多了一个注解@ModelAttribute(“user”),它的作用是将该绑定的命令对象以“user”为名称添加到模型对象中供视图页面展示使用。我们此时可以在视图页面使用${user.username}来获取绑定的命令对象的属性。
如请求参数包含“?username=crystal&password=123&workInfo.city=bj”自动绑定到user 中的workInfo属性的city属性中。
4.2 暴露表单引用对象为模型数据 (方法)
Spring MVC 在调用目标处理方法之前会逐个调用在方法级上标注了@ModelAttribute 的方法。
@ModelAttributeprivate User addUser() { User user = new User(); user.setAge(23); user.setName("crystal"); return user;}
4.3 暴露@RequestMapping方法返回值为模型数据 (处理方法)
@RequestMapping("/testModelAttribute")@ModelAttribute("user")public String testModelAttribute(User user) { System.out.println(user); return "success";}
返回值类型是命令对象类型,而且通过@ModelAttribute(“user”)注解,此时会暴露返回值到模型数据( 名字为user ) 中供视图展示使用
@ModelAttribute 注解的返回值会覆盖@RequestMapping 注解方法中的@ModelAttribute 注解的同名命令对象
- Springmvc 处理数据模型(三)
- SpringMVC学习(六)之处理数据模型
- SpringMVC之处理数据模型
- SpringMVC 处理数据模型
- SpringMVC 之 处理数据模型
- SpringMVC(三)异常处理
- (三)概念数据模型
- Springmvc知识二------数据模型的处理&视图&视图解析器
- SpringMVC(四)数据模型和@SessionAttributes注解
- PowerDesigner教程系列(三)概念数据模型
- PowerDesigner教程系列(三)概念数据模型
- PowerDesigner教程系列(三)概念数据模型
- PowerDesigner教程(三)概念数据模型
- PowerDesigner教程系列(三)概念数据模型
- PowerDesigner教程系列(三)概念数据模型
- PowerDesigner教程系列(三)概念数据模型
- PowerDesigner教程系列(三)概念数据模型
- PowerDesigner教程系列(三)概念数据模型
- tomcat在conf/Catalina/localhost目录下配置虚拟目录
- httpurlconnectionget3
- 【脚本语言系列】关于Python基础知识多返回值,你需要知道的事
- include,require,include_once,require_once区别和性能对比
- 多年iOS开发经验总结(二)
- Springmvc 处理数据模型(三)
- ftpClient = new FtpClient(ip) 报错 cannot instantiate the type FtpClient
- 大型网站架构系列:负载均衡详解(1)
- bootscrap+angular+ssm整合(中)
- android之代码混淆
- git diff操作
- 跨域请求设置
- Android 开源库获取途径整理
- JavaScript/VBScript脚本程序调试(Wscript篇)