對Session.getAttribute(),Request.setAttribute()和ModelMap.addAttribute()用法的理解

1.ModelMap對象主要用於傳遞控制方法處理數據到結果頁面,也就是說咱們把結果頁面上須要的數據放到ModelMap對象中便可,他的做用相似於request對象的setAttribute方法的做用,用來在一個請求過程當中傳遞處理的數據。經過如下方法向頁面傳遞參數:  addAttribute(String key,Object value);  說白了就是ModelMap、Model、ModelAndView用於在控制器中放置數據到request中,以便轉發給視圖jsp好經過request.getAttribute取得。  spring

2.ModelMap的實例是由mvc框架自動建立並做爲控制器方法參數傳入,用戶無需本身建立。ModelAndView的實例是由用戶手動建立的,這也是和ModelMap的一個區別。  說白了就是ModelMap須要在參數中聲明由springmvc傳入,視圖名經過return 返回,ModelAndView須要在方法體中本身new,new的同時構造函數參數要指定視圖名。添加數據這兩個用法是同樣的。model和modelmap會自動轉成modeladnview。  session

3.public String test1(@ModelAttribute("user") UserModel user)。如請求參數包含「?username=zhangsan&password=123456&workInfo.city=wh」自動綁定到user 中的workInfo屬性的city屬性中  說白了若是不加@ModelAttribute修飾參數,那麼只是簡單的自動將請求的數據按屬性名綁定到user對象裏,加了的話就能夠在綁定參數數據的同時自動以user屬性名添加到model裏。更省事了。要否則還得手動寫上 model.addAttribute("user",user); 固然還有可能先對user進行進一步的數據加工後再addAttribute("user") 。   mvc

4.session.setAttribute()和session.getAttribute()配對使用,做用域是整個會話期間,在全部的頁面都使用這些數據的時候使用。request.setAttribute()和request.getAttribute()配對使用,做用域是請求和被請求頁面之間。框架

5.@SessionAttributes  做用於Controller類,讓Controller全部方法共享Model對象中一個或多個屬性  再解釋明白一點:就是原來model中有一個屬性testId,如今在Controller上添加註解@SessionAttributes(「testId」),則全部方法均可以經過model獲取該testId屬性值。jsp

 

關於session,request,modelMap取值順序:函數

Model model,HttpServletRequest request, ModelMap map聲明變量 request.getSession().setAttribute("test", "haiwei2Session");對象

request.setAttribute("test", "haiwei1request");  ci

map.addAttribute("test", "haiweiModelMap");作用域

model.addAttribute("test", "haiweiModel");  get

我經過${test}這個方式取值,優先取Model和ModelMap的,Model和ModelMap是同一個東西,誰最後賦值的就取誰的,而後是request,最後是從session中獲取。

相關文章
相關標籤/搜索