日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

thymeleaf給響應頁面傳遞參數(modelandview 中的model)

作者:仰望星空的快樂 更新時間: 2022-05-10 編程語言

從控制器類向前端頁面跳轉時,傳遞參數

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方式獲取:

學習源碼

在每個方法設置參數的地方打斷點debug調試,在方法棧(就是進入棧中的方法,方法只有進入棧中才可以執行)中,

發現他們都被DispatcherServlet方法調用了

即DispatcherServlet是先于控制方法中的添加屬性語句(?modelmap.addAttribute("testscope","zyk_modelmap");舉個栗子)執行的,并在執行過程中調用了控制方法中添加屬性的語句

?DispatherServlet這個方法,點進去會發現是這一句 mv=....

而mv是個modelandview對象? ? ? ? ?所以得出結論如下

?看源碼的結論:不管用如上的哪種方式,即使是原生request,也會把請求數據放入model,請求頁面放入view,最后返回一個modelandview對象

驗證:

在mv=...下面打個斷點,等它執行完控制器中添加的屬性的語句,會發現?mv中已經有剛才傳遞的數據了

原文鏈接:https://blog.csdn.net/sharesb/article/details/124356839

欄目分類
最近更新