基本介绍
数据回显:模型数据导向视图(模型数据 —> Controller —> 视图) 说明:SpringMVC在调用方法前会创建一个隐含的模型对象,作为模型数据的存储容器(隐含模型)
一、ModelAndView
@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
- 如果是用在方法的入参上
@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);
- 如果是定义在方法之上
@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类型的入参,就会将隐含模型中对象的引用传给这些入参
@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响应报文发送给客户端