網站首頁 編程語言 正文
從控制器類向前端頁面跳轉時,傳遞參數
modelandview 中的model
1.原生方式request
thymeleaf 獲得要訪問頁面的string 值之后,加上前綴加上后綴 ,請求轉發(fā),跳轉至該頁面,所以可以直接設置請求的參數。
點我使用原生的request設置request的attribute
?控制方法:
@RequestMapping(value = "yuansheng_request")
public String display_yuansheng_request_attribute(HttpServletRequest request)
{ request.setAttribute("name","zyk");
//thymeleaf加上前后綴之后,請求轉發(fā)方式跳轉該頁面,所以可以使用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調試,在方法棧(就是進入棧中的方法,方法只有進入棧中才可以執(zhí)行)中,
發(fā)現他們都被DispatcherServlet方法調用了
即DispatcherServlet是先于控制方法中的添加屬性語句(?modelmap.addAttribute("testscope","zyk_modelmap");舉個栗子)執(zhí)行的,并在執(zhí)行過程中調用了控制方法中添加屬性的語句
?DispatherServlet這個方法,點進去會發(fā)現是這一句 mv=....
而mv是個modelandview對象? ? ? ? ?所以得出結論如下
?看源碼的結論:不管用如上的哪種方式,即使是原生request,也會把請求數據放入model,請求頁面放入view,最后返回一個modelandview對象
驗證:
在mv=...下面打個斷點,等它執(zhí)行完控制器中添加的屬性的語句,會發(fā)現?mv中已經有剛才傳遞的數據了
原文鏈接:https://blog.csdn.net/sharesb/article/details/124356839
相關推薦
- 2022-10-05 虛擬機VMware?Tools安裝步驟_VMware
- 2022-11-21 基于C++實現一個日期計算器_C 語言
- 2022-09-22 Mybaits一級緩存和二級緩存分別是什么,區(qū)別是什么?
- 2022-06-25 python多進程和多線程介紹_python
- 2022-08-03 C++類與對象深入之引用與內聯函數與auto關鍵字及for循環(huán)詳解_C 語言
- 2022-03-20 詳解C語言對字符串處理函數的實現方法_C 語言
- 2022-02-04 Linux中查看進程命令ps aux,ps -ef,ps -A,ps -a
- 2022-07-15 python實現打印類的所有屬性和方法_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支