@ModelAttribute和@SessioinAttribute總結

要實現Controller返回數據給頁面,spring MVC 提供了以下幾種途徑:


ModelAndView:將視圖和數據封裝成ModelAndView對象,作爲方法的返回值,數據最終會存到HttpServletRequest對象中!
Model對象:通過給方法添加引用Model對象入參,直接往Model對象添加屬性值。哪些類型的入參才能夠引用Model對象,有三種類型,分別是  org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map。只要是這些類型的入參,都是指向Model對象的,而且不管定義多少個這些類型的入參都是指向同一個Model對象!
@SessionAttributes:通過給Controller類添加@SessionAttributes註解,該註解的name和value屬性值都是Model的key值,意思是指Model中這些key對應的數據也會存到HttpSession,不僅僅存到HttpServletRequest對象中!這樣頁面可以共享HttpSession中存的數據了!
@ModelAttribute:使用@ModelAttribute註解的方法會在此Controller每個方法執行前被執行,指定@ModelAttribute的name或value都是一樣的功能,都是作爲key,將註解的方法返回的對象作爲value存放到Model中,不指定name和value的話,則以註解的方法返回的類型名稱首字母小寫作爲key。
當然,除了上述的途徑,也可以使用傳統的方式,那就是直接使用HttpServletRequest或HttpSession對象來存數據,頁面上再去取。
注意:Model中存的數據,最終都會存放到HttpServletRequest對象中,頁面上可以通過HttpServletRequest對象獲取數據。
接下來,我們就看看demo,通過demo來理解如何通過這幾種方式實現將數據返回給頁面。
demo場景:通過ResetFul風格的URL路徑傳遞用戶ID給Controller,Controller查詢出對應的用戶信息返回給頁面。
Spring MVC配置的視圖解析器:

@ModelAttribute一個具有如下三個作用:  


①綁定請求參數到命令對象:放在功能處理方法的入參上時,用於將多個請求參數綁定到一個命令對象,從而簡化綁  
定流程,而且自動暴露爲模型數據用於視圖頁面展示時使用;  
②暴露表單引用對象爲模型數據:放在處理器的一般方法(非功能處理方法)上時,是爲表單準備要展示的表單引用  
對象,如註冊時需要選擇的所在城市等,而且在執行功能處理方法(@RequestMapping 註解的方法)之前,自動添加  
到模型對象中,用於視圖頁面展示時使用;  
③暴露@RequestMapping 方法返回值爲模型數據:放在功能處理方法的返回值上時,是暴露功能處理方法的返回值爲  
模型數據,用於視圖頁面展示時使用。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章