thymeleaf给响应页面传递参数(modelandview 中的model)

从控制器类向前端页面跳转时,传递参数

modelandview 中的model

1.原生方式request

thymeleaf 获得要访问页面的string 值之后,加上前缀加上后缀 ,请求转发,跳转至该页面,所以可以直接设置请求的参数。


点我使用原生的request设置request的attribute

 控制方法:

 @RequestMapping(value = "yuansheng_request")
    public String display_yuansheng_request_attribute(HttpServletRequest request)
    {   request.setAttribute("name","zyk");
        //thymeleaf加上前后缀之后,请求转发方式跳转该页面,所以可以使用request设置请求
        return "sucess";
    }

 sucess页面:

 servlet原生方式获取数据:

 2.原生session方式

  点我使用原生设置session的attribute

 控制方法

@RequestMapping(value = "/test_session")
    public String display_session(HttpSession session)
    {
        session.setAttribute("sesson","session_zyk");
        return "sucess";
    }

 success页面

session获取:

3.原生application方式

 @RequestMapping(value = "/test_application")
    public String display_application(HttpSession session)
    {
        ServletContext application= session.getServletContext();
        application.setAttribute("testapplication","application_zyk");
        return "sucess";
    }
  点我使用原生设置application的attribute

success页面 

application获取:

4.ModelAndView设置参数(官方推荐)

  
点我使用ModelAndView设置request的attribute

控制方法: 

 @RequestMapping(value = "ModelAndView_request")
    public ModelAndView display_modelandview()
    {
        ModelAndView mav=new ModelAndView();
        mav.addObject("modelandview_name","zyk_mvn");
        mav.setViewName("sucess");
        return mav;
    }

 sucess页面

modelandview方式获取:

5.model设置参数

控制方法

    @RequestMapping(value = "/Model_Request")
    public String display_model(Model model)
    {
        model.addAttribute("model_name","zyk_model");
        System.out.println(model.getClass().getName());
        return "sucess";
    }
 点我使用Model设置request的attribute

sucess页面 

model方式获取:

6.map方式设置参数

  点我使用testMap设置request的attribute

 控制方法

 @RequestMapping(value = "/testMap")
    public String display_model(Map map)
    {
       map.put("test_map","zyk_map");
        System.out.println(map.getClass().getName());
        return "sucess";
    }

success页面

map方式获取:

7.modelmap设置参数

  点我使用testMap设置request的attribute
 @RequestMapping(value = "/testmodelmap")
    public String display_model(ModelMap modelmap)
    {
        modelmap.addAttribute("testscope","zyk_modelmap");
        System.out.println(modelmap.getClass().getName());
        return "sucess";
    }

success页面

modelmap方式获取:

学习源码

thymeleaf给响应页面传递参数(modelandview 中的model)_第1张图片

在每个方法设置参数的地方打断点thymeleaf给响应页面传递参数(modelandview 中的model)_第2张图片debug调试,在方法栈(就是进入栈中的方法,方法只有进入栈中才可以执行)中,

发现他们都被DispatcherServlet方法调用了

thymeleaf给响应页面传递参数(modelandview 中的model)_第3张图片即DispatcherServlet是先于控制方法中的添加属性语句( modelmap.addAttribute("testscope","zyk_modelmap");举个栗子)执行的,并在执行过程中调用了控制方法中添加属性的语句

 DispatherServlet这个方法,点进去会发现是这一句 mv=....

而mv是个modelandview对象         所以得出结论如下

thymeleaf给响应页面传递参数(modelandview 中的model)_第4张图片

 看源码的结论:不管用如上的哪种方式,即使是原生request,也会把请求数据放入model,请求页面放入view,最后返回一个modelandview对象

验证:

在mv=...下面打个断点,等它执行完控制器中添加的属性的语句,会发现 mv中已经有刚才传递的数据了

thymeleaf给响应页面传递参数(modelandview 中的model)_第5张图片

thymeleaf给响应页面传递参数(modelandview 中的model)_第6张图片

你可能感兴趣的:(spring-mvc,java)