处理方法返回值的可选类型 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" />