SpringMVC 数据回显(域) [ 技术杂谈 ]
九叶的小窝 文章 正文
![As Long As You Love Me.](https://api.qwq.ro/storage/users/uid-1/1661304663.png)
九叶
{{nature("2020-12-26 16:30:28")}}更新基本介绍
数据回显:模型数据导向视图(模型数据 ---> 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响应报文发送给客户端
{{nature('2021-12-07 15:29:00')}} {{format('2671')}}人已阅读
{{nature('2021-01-31 20:01:00')}} {{format('1172')}}人已阅读
{{nature('2020-12-11 21:17:00')}} {{format('1085')}}人已阅读
{{nature('2021-04-22 15:16:00')}} {{format('1057')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}