spring MVC 向前臺傳值

spring mvc處理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void。下面將對具體的一一進行說明:
ModelAndView

Java代碼  收藏代碼
  1.    
  2. @RequestMapping("/show1"
  3. public ModelAndView show1(HttpServletRequest request, 
  4.            HttpServletResponse response) throws Exception { 
  5.        ModelAndView mav = new ModelAndView("/demo2/show"); 
  6.        mav.addObject("account""account -1"); 
  7.        return mav; 
  8.    } 


通過ModelAndView構造方法可以指定返回的頁面名稱,也可以通過setViewName()方法跳轉到指定的頁面 ,
使用addObject()設置需要返回的值,addObject()有幾個不同參數的方法,可以默認和指定返回對象的名字。
調用addObject()方法將值設置到一個名爲ModelMap的類屬性,ModelMap是LinkedHashMap的子類,
具體請看類。

Model 是一個接口, 其實現類爲ExtendedModelMap,繼承了ModelMap類。

Map  

Java代碼  收藏代碼
  1. @RequestMapping("/demo2/show"
  2.     public Map<String, String> getMap() { 
  3.         Map<String, String> map = new HashMap<String, String>(); 
  4.         map.put("key1""value-1"); 
  5.         map.put("key2""value-2"); 
  6.         return map; 
  7.     } 


在jsp頁面中可直通過${key1}獲得到值, map.put()相當於request.setAttribute方法。
寫例子時發現,key值包括 - . 時會有問題.

View 可以返回pdf excel等,暫時沒詳細瞭解。

String 指定返回的視圖頁面名稱,結合設置的返回地址路徑加上頁面名稱後綴即可訪問到。
注意:如果方法聲明瞭註解@ResponseBody ,則會直接將返回值輸出到頁面。
例如:

Java代碼  收藏代碼
  1. @RequestMapping(value = "/something", method = RequestMethod.GET) 
  2. @ResponseBody 
  3. public String helloWorld()  { 
  4. return "Hello World"


上面的結果會將文本"Hello World "直接寫到http響應流。

Java代碼  收藏代碼
  1. @RequestMapping("/welcome"
  2. public String welcomeHandler() { 
  3.   return "center"


對應的邏輯視圖名爲“center”,URL= prefix前綴+視圖名稱 +suffix後綴組成。

void  如果返回值爲空,則響應的視圖頁面對應爲訪問地址

Java代碼  收藏代碼
  1. @RequestMapping("/welcome"
  2. public void welcomeHandler() {} 


此例對應的邏輯視圖名爲"welcome"。

小結:
1.使用 String 作爲請求處理方法的返回值類型是比較通用的方法,這樣返回的邏輯視圖名不會和請求 URL 綁定,具有很大的靈活性,而模型數據又可以通過 ModelMap 控制。
2.使用void,map,Model 時,返回對應的邏輯視圖名稱真實url爲:prefix前綴+視圖名稱 +suffix後綴組成。
3.使用String,ModelAndView返回視圖名稱可以不受請求的url綁定,ModelAndView可以設置返回的視圖名稱。

 

 

 

Model model,HttpServletRequest request, ModelMap map聲明變量

request.getSession().setAttribute("test", "haiwei2Session");
request.setAttribute("test", "haiwei1request"); 
map.addAttribute("test", "haiweiModelMap");
model.addAttribute("test", "haiweiModel");

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

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