spring mvc處理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void。下面將對具體的一一進行說明:
ModeAndView:
@RequestMapping("/show1") public ModelAndView show1(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("/demo2/show"); mav.addObject("account", "account -1"); return mav; }通過ModelAndView構(gòu)造方法可以指定返回的頁面名稱,也可以通過setViewName()方法跳轉(zhuǎn)到指定的頁面 , 使用addObject()設置需要返回的值,addObject()有幾個不同參數(shù)的方法,可以默認和指定返回對象的名字。
Model:
@RequestMapping("/demo2/show") public Map<String, String> getMap() { Map<String, String> map = new HashMap<String, String>(); map.put("key1", "value-1"); map.put("key2", "value-2"); return map; }Map:
@RequestMapping("/demo2/show") public Map<String, String> getMap() { Map<String, String> map = new HashMap<String, String>(); map.put("key1", "value-1"); map.put("key2", "value-2"); return map; }在jsp頁面中可直通過${key1}獲得到值, map.put()相當于request.setAttribute方法。
String:
@RequestMapping(value = "/something", method = RequestMethod.GET)@ResponseBodypublic String helloWorld() {return "Hello World";}String 指定返回的視圖頁面名稱,結(jié)合設置的返回地址路徑加上頁面名稱后綴即可訪問到。注意:如果方法聲明了注解@ResponseBody ,則會直接將返回值輸出到頁面。
Void:
@RequestMapping("/welcome")public void welcomeHandler() {}如果返回值為空,則響應的視圖頁面對應為訪問地址。
以上內(nèi)容來自:http://flyer2010.VEvb.com/blog/1294400
Spring Web MVC 提供Model、Map或ModelMap讓我們能去暴露渲染視圖需要的模型數(shù)據(jù)。
@RequestMapping(value = "/model")public String createUser(Model model, Map model2, ModelMap model3) { model.addAttribute("a", "a"); model2.put("b", "b"); model3.put("c", "c"); System.out.println(model == model2); System.out.println(model2 == model3); return "success";}雖然此處注入的是三個不同的類型(Model model, Map model2, ModelMap model3),但三者是同一個對象,如圖所示:

AnnotationMethodHandlerAdapter和RequestMappingHandlerAdapter將使用BindingAwareModelMap作為模型對象的實現(xiàn),即此處我們的形參(Model model, Map model2, ModelMap model3)都是同一個BindingAwareModelMap實例。
此處還有一點需要我們注意:
@RequestMapping(value = "/mergeModel")public ModelAndView mergeModel(Model model) { model.addAttribute("a", "a");//①添加模型數(shù)據(jù) ModelAndView mv = new ModelAndView("success"); mv.addObject("a", "update");//②在視圖渲染之前更新③處同名模型數(shù)據(jù) model.addAttribute("a", "new");//③修改①處同名模型數(shù)據(jù) //視圖頁面的a將顯示為"update" 而不是"new" return mv;}從代碼中我們可以總結(jié)出功能處理方法的返回值中的模型數(shù)據(jù)(如ModelAndView)會 合并 功能處理方法形式參數(shù)中的模型數(shù)據(jù)(如Model),但如果兩者之間有同名的,返回值中的模型數(shù)據(jù)會覆蓋形式參數(shù)中的模型數(shù)據(jù)。
以上內(nèi)容來自:http://jinnianshilongnian.VEvb.com/blog/1698916
新聞熱點
疑難解答