详解SpringMVC如何进行数据回显

  

  

数据回显:模型数据导向视图(模型数据——→控制器——→视图)
  

  

说明:SpringMVC在调用方法前会创建一个隐含的模型对象,作为模型数据的存储容器(隐含模型)

  

        @RequestMapping(方法=RequestMethod.POST)   公共ModelAndView createUser(用户用户)   {   userService.createUser(用户);   ModelAndView飞行器=new ModelAndView ();   mav.setViewName(“用户/createSuccess”);   飞行器。addObject(“用户”,用户);   返回飞行器;   }      

  

1,如果是用在方法的入参上

        @RequestMapping (value=" https://www.yisu.com/handle1 ")   公共字符串handle1 (@ModelAttribute(“用户”)用户用户)   {   user.setUserId (“1000”);   返回“/user/createSuccess”;   }      

处理机制如下:
  

  

。将HTTP请求参数绑定到用户对象中
  

  

B。以用户为键,将用户对象放到数据模型中——→相当于地图。(“用户”,用户),

  

2,如果是定义在方法之上

        @ModelAttribute(“用户”)   公共用户getUser () {   用户用户=新用户();   user.setUserId (“1001”);   返回用户;   }   @RequestMapping (value=" https://www.yisu.com/handle2 ")   公共字符串handle2 (@ModelAttribute(“用户”)用户用户)   {   user.setUserName(“汤姆”);   返回“/user/showUser”;   }   之前      

处理机制如下:

  
      <李>调用目标方法前,扫描控制器中所有方法上包含@ModelAttribute的方法,并将方法的返回值放到模型数据中(类似于上述的第二步)   <李>执行指定的方法,如果入参有@ModelAttribute,则将(1)中放置于模型数据中的对象赋值给入参的绑定对象李   <李>根据HTTP请求继续对绑定对象进行填充和覆盖,得到一个整合版的对象,覆盖模型数据中的原对象李   
  

  

SpringMVC一旦发现处理方法有图或模型类型的入参,就会将隐含模型中对象的引用传给这些入参

        @RequestMapping (value=" https://www.yisu.com/handle3 ")   公共字符串handle3 (ModelMap ModelMap)   {   modelMap.addAttribute (“testAttr”、“value1”);   用户用户=(用户)modelMap.get(“用户”);   user.setUserName(“汤姆”);   返回“/user/showUser”;   }      

        @ controller   @RequestMapping(“/用户”)   @SessionAttributes(“用户”)//①将②处的模型属性自动保存到HttpSession中   公开课用户控件   {   @RequestMapping (value=" https://www.yisu.com/handle4 ")   公共字符串handle4 (@ModelAttribute(“用户”)用户用户)//②   {   user.setUserName(“约翰”);   返回“用户重定向://handle5.html”;   }      @RequestMapping (value=" https://www.yisu.com/handle5 ")   公共字符串handle5 (ModelMapmodelMap SessionStatussessionStatus)   {   用户用户=(用户)modelMap.get(“用户”);//③读取模型中的数据   如果(用户!=null)   {   user.setUserName(“码头”);   sessionStatus.setComplete ();//④让Spring MVC清除本处理器对应的会话属性   }   返回“/user/showUser”;   }   }   之前      

上面在向handle4发送请求时,抛异常,因为@ModelAttribute和@SessionAttributes的处理遵循一个流程:

  

1, SpringMVC在调用处理方法前,在请求线程中自动创建一个隐含的模型对象
  

  

2,调用所有方法上标注了@ModelAttribute的方法,并将返回值添加到隐含模型对象中
  

  

3,查看会话中是否存在@SessionAttributes (“XXX”)所指定的XXX属性,如果有,将其添加到隐含对象中,此时若隐含对象已经存在了XXX属性,则会覆盖掉
  

  

4,对于入参标注了@ModelAttribute (XXX)的方法,处理流程如下:
  

  

(1)如果隐含模型中拥有了XXX属性,将其赋值给入参,再将请求消息填充该对象,然后返回;如果隐含模型中不存在XXX,则执行(2)
  

  

(2)如果XXX是会话属性,则尝试从从会话中取出该属性,将其复制给入参再将请求消息填充该对象。如果会话对象中找不到XXX属性,则抛出HttpSessionRequiredException异常,如果隐含模型和会话中均不在XXX,则执行(3)

详解SpringMVC如何进行数据回显