Loading... #### 基本介绍 **数据回显:模型数据导向视图(模型数据 ---> Controller ---> 视图)** **说明**:SpringMVC在调用方法前会创建一个隐含的模型对象,作为模型数据的存储容器(隐含模型) #### 一、ModelAndView ```java @RequestMapping(value = "mv") public ModelAndView mv(){ Map <String,Date> model = new HashMap<String,Date>(); model.put("Date",new Date()); ModelAndView mv = new ModelAndView("Today",model); return mv; } ``` #### 二、@ModelAttribute 1. 如果是用在方法的入参上 ```java @RequestMapping(value = "product", method = RequestMethod.POST) public String product(@ModelAttribute("product") Product product){ System.out.println(product); return "index"; } ``` 处理机制如下: A.将HTTP请求参数绑定到Product对象中 B.以product为键,将Product对象放到数据模型中 --->相当于map.put("product", product); 2. 如果是定义在方法之上 ```java @ModelAttribute("product") public Product getProduct() { Product product = new Product(); product.setPid(1); return product; } @RequestMapping(value = "product", method = RequestMethod.POST) public String product(@ModelAttribute("product") Product product){ System.out.println(product); return "index"; } ``` 处理机制如下: * 调用目标方法前,扫描控制器中所有方法上包含@ModelAttribute的方法,并将方法的返回值放到模型数据中 (类似于上述的第二步) * 执行指定的方法,如果入参有@ModelAttribute,则将(1)中放置于模型数据中的对象赋值给入参的绑定对象 * 根据HTTP请求继续对绑定对象进行填充和覆盖,得到一个整合版的对象,覆盖模型数据中的原对象 #### 三、Map Model(org.springframework.ui.Model和java.util.Map) SpringMVC一旦发现处理方法有Map或Model类型的入参,就会将隐含模型中对象的引用传给这些入参 ```java @RequestMapping(value = "modelMap") public String modelMapDemo(Product product, ModelMap modelMap){ modelMap.addAttribute("productModelMap",product); return "index"; } ``` #### 四、SessionAttributes(SpringMVC会将模型中对应的属性暂存到HttpSession中,**他是写在类上面的,并且属性名和model中的一致**) ``` @Controller //标注这个Class是一个控制器 @SessionAttributes("productModel") public class ProductController{ @RequestMapping(value = "session") public String modelDemo (Product product, Model model){ model.addAttribute("productModel",product); return "index"; } } ``` #### SpringMVC 的数据流图总结 > **1.HTTP请求报文到达服务器,服务器将其封装成HTTPServletRequest对象** > > **2.SpringMVC框架截获这个HTTPServletRequest对象** > > **3.SpringMVC 创建一个隐含模型对象,作为处理本次请求的上下文数据存放处** > > **4.SpringMVC 将一个HTTPServletRequest对象数据绑定到处理方法的入参对象中(表单/命令对象)** > > **5.将绑定错误信息、校验错误信息都保存到隐含模型中** > > **6.本次请求的对象模型数据放到HTTPServletRequest的属性列表中,暴露给视图对象** > > **7.视图对象对已经放在HTTPServletRequest属性列表的模型数据进行渲染** > > **8.把渲染后的HTTP响应报文发送给客户端** Last modification:December 26, 2020 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 感谢大佬投喂 啾咪~