處理方法返回值的可選類型 spring mvc處理方法支持以下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void。下面將對具體的一一進行說明: ModelAndView Java代碼 @RequestMapping("/show1") public ModelAndView show1(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("/demo2/show"); mav.addObject("account", "account -1"); return mav; } @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構造方法能夠指定返回的頁面名稱,也能夠經過setViewName()方法跳轉到指定的頁面 , 使用addObject()設置須要返回的值,addObject()有幾個不一樣參數的方法,能夠默認和指定返回對象的名字。 調用addObject()方法將值設置到一個名爲ModelMap的類屬性,ModelMap是LinkedHashMap的子類, 具體請看類。 Model 是一個接口, 其實現類爲ExtendedModelMap,繼承了ModelMap類。 Map Java代碼 @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; } @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方法。 寫例子時發現,key值包括 - . 時會有問題. View 能夠返回pdf excel等,暫時沒詳細瞭解。 String 指定返回的視圖頁面名稱,結合設置的返回地址路徑加上頁面名稱後綴便可訪問到。 注意:若是方法聲明瞭註解@ResponseBody ,則會直接將返回值輸出到頁面。 例如: Java代碼 @RequestMapping(value = "/something", method = RequestMethod.GET) @ResponseBody public String helloWorld() { return "Hello World"; } @RequestMapping(value = "/something", method = RequestMethod.GET) @ @ResponseBody p public String helloWorld() { r return "Hello World"; } } 上面的結果會將文本"Hello World "直接寫到http響應流。 Java代碼 @RequestMapping("/welcome") public String welcomeHandler() { return "center"; } @RequestMapping("/welcome") p public String welcomeHandler() { return "center"; } } 對應的邏輯視圖名爲「center」,URL= prefix前綴+視圖名稱 +suffix後綴組成。 void 若是返回值爲空,則響應的視圖頁面對應爲訪問地址 Java代碼 @RequestMapping("/welcome") public void welcomeHandler() {} @RequestMapping("/welcome") p public void welcomeHandler() {} 此例對應的邏輯視圖名爲"welcome"。 小結: 1.使用 String 做爲請求處理方法的返回值類型是比較通用的方法,這樣返回的邏輯視圖名不會和請求 URL 綁定,具備很大的靈活性,而模型數據又能夠經過 ModelMap 控制。 2.使用void,map,Model 時,返回對應的邏輯視圖名稱真實url爲:prefix前綴+視圖名稱 +suffix後綴組成。 3.使用String,ModelAndView返回視圖名稱能夠不受請求的url綁定,ModelAndView能夠設置返回的視圖名稱
按照前後順序適應視圖,先找ftl的,再是jsp <!-- freemarker的配置 --> <bean id="freemarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/ftl/module/" /> <property name="defaultEncoding" value="utf-8" /> <property name="freemarkerSettings"> <props> <prop key="template_update_delay">10</prop> <prop key="locale">zh_CN</prop> <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop> <prop key="date_format">yyyy-MM-dd</prop> <prop key="number_format">#.##</prop> </props> </property> <property name="freemarkerVariables"> <map> <entry key="dictDisplay" value-ref="dictDisplay" /> <entry key="dictSelect" value-ref="dictSelect" /> </map> </property> </bean> <!-- 字典 --> <bean id="dictDisplay" class="com.bluedon.cb.util.freemarker.DictDisplayDirective" /> <bean id="dictSelect" class="com.bluedon.cb.util.freemarker.DictSelectDirective" /> <!-- FreeMarker視圖解析 如返回userinfo。。在這裏配置後綴名ftl和視圖解析器。。 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="viewClass" value="com.bluedon.cb.util.FreeMarkerViewUtil" /> <property name="suffix" value=".ftl" /> <property name="contentType" value="text/html;charset=utf-8" /> <property name="exposeRequestAttributes" value="true" /> <property name="exposeSessionAttributes" value="true" /> <property name="exposeSpringMacroHelpers" value="true" /> </bean> <!-- 對模型視圖名稱的解析,即在模型視圖名稱添加先後綴,返回普通的jsp視圖 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />