1.控制器传递数据的返回值类型
使用@Controller注解的控制器下面的方法,其返回值有以下4种类型:ModelAndView,String,无返回值void,返回自定义类型对象。
2.返回值类型的选择
i.若控制器方法处理完后,需要跳转到其他资源,同时又要往跳转资源传递数据,此时控制器返回ModelAndView比较合适。这种情况下在控制器方法里面定义一个ModelAndView对象,并调用ModelAndView对象的addObject()方法添加Model数据,用于传递到目标View页面,调用setViewName()方法
设置目标View页面。
例:相关代码
ModelAndView mv=new ModelAndView();
mv.setViewName("...");
mv.addObject("Key",Value);
ii.若控制器方法只跳转,而不传数据,或只传数据,而不向任何资源跳转(如页面的Ajax异步响应),此时若返回ModelAndView,都不太合适,要么Model多余,要么View多余。可以考虑使用其他3种返回值类型。
3.控制器返回String类型
控制器返回的字符串代表的是逻辑视图名,再通过InternalResourceViewResolver内部资源视图解析器将其转换为物理视图地址。
除了逻辑视图名,也可以是View对象名,但需要另外定义一个BeanNameViewResolver视图解析器将其解析为真正的URL。
i.若跳转资源为内部资源,则视图解析器可以使用InternalResourceViewResolver内部资源视图解析器。此时控制器返回的字符串与视图解析器的
前缀和后缀相结合,即可形成要访问的URI。
<!-- 配置内部视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--逻辑视图前缀-->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!--逻辑视图后缀,匹配模式:前缀+逻辑视图+后缀,形成完整路径名-->
<property name="suffix" value=".jsp"></property>
</bean>
ii.若跳转资源为外部资源,则可以使用BeanNameViewResolver类型的视图解析器,然后在配置文件中再定义一些外部资源视图View对象,此时
处理器返回的字符串就是要跳转资源视图的View的名称。一般这种情况只跳转,不带传递数据
<!-- 配置BeanNameViewResolver类型的视图解释器 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<!-- 设置优先级为5,比内部视图解析器要高,优先使用 -->
<property name