{{format('0')}} {{format('669')}} {{format('2549')}}

SpringMVC 数据回显(域) [ 技术杂谈 ]

九叶的小窝 文章 正文

As Long As You Love Me.
分享

九叶

{{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

  1. 如果是用在方法的入参上
@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);

  1. 如果是定义在方法之上
    @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响应报文发送给客户端

评论 0
0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}
TOP 2
Minecraft | [1.12.2] 核电工艺模拟器 1.2.25 —— 汉化版

{{nature('2021-12-07 15:29:00')}} {{format('2671')}}人已阅读

TOP 3
SSM搭建Spring单元测试环境

{{nature('2021-01-31 20:01:00')}} {{format('1172')}}人已阅读

TOP 4
dispatcher-servlet.xml文件配置模板

{{nature('2020-12-11 21:17:00')}} {{format('1085')}}人已阅读

TOP 5
Windows平台Nacos启动报错无法创建Bean实例

{{nature('2021-04-22 15:16:00')}} {{format('1057')}}人已阅读

目录

标签云

SpringMVC 数据回显

一言

# {{hitokoto.data.from || '来自'}} #
{{hitokoto.data.hitokoto || '内容'}}
作者:{{hitokoto.data.from_who || '作者'}}
自定义UI
配色方案

侧边栏