SpringMVC多视图解析器的配置和使用
来源:互联网 发布:冰与火战歌网络异常 编辑:程序博客网 时间:2024/06/06 05:52
在SpringMVC模式当中可以通过如下配置来支持多视图解析
<!-- jsp jstl --> <bean id="JSPViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="viewNames" value="*jsp" /> <property name="contentType" value="text/html; charset=utf-8"/> <property name="prefix" value="/" /> <property name="suffix" value="" /> <property name="order" value="1"></property> </bean>
<bean id="FMViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/> <property name="viewNames" value="*html" /> <property name="contentType" value="text/html; charset=utf-8"/> <property name="cache" value="true" /> <property name="prefix" value="/" /> <property name="suffix" value="" /> <property name="order" value="0"></property> </bean>
首先可以使用order属性进行设置 系统首先按解析器的order值进行查找 首先使用FreeMarkerViewResolver解析器调用canHandle方法,判断当前解析器对视图是否能够解析。如不能解析在依次调用。
配置中可会出现的问题:
假设我有两个jsp:
1 WEB-INF/html/a.jsp
2 WEB-INF/report/b.jsp
且我配置了视图解析器:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="1"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="contentType" value="text/html"/> <property name="prefix" value="/WEB-INF/html/"/> <property name="suffix" value=".jsp"/> </bean> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="2"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="contentType" value="text/html"/> <property name="prefix" value="/WEB-INF/report/"/> <property name="suffix" value=".jsp"/> </bean>
然后呢,我分别返回视图名为a和b;为什么a能找到,而b的时候是404;我配置了两个视图解析器,第一个找不到的话,第二个能找到啊?遇到过这个问题的朋友基本上会有类似的问题;
导致原因:
此处我们使用了InternalResourceViewResolver,其有一个buildView方法,该方法一定会创建一个View;所以呢View永远不为null(即使该jsp不存在);问题就是出在这;因为我们使用这个的时候默认是使用servlet forward转发的,此时并不知道该jsp是否存在。
解决方案:
最简单的办法是使用其viewNames属性,来指定一个是否可以处理的规则
<property name= "viewNames"value= "html*"/>
<property name= "viewNames"value= "report*"/>
如上两个的意思是对html或report开头的视图名进行处理,比如返回的视图名为html/a 那么会交给viewNames为html*的那个解析器处理;支持的规则可以查看javadoc。
2 0
- SpringMVC多视图解析器的配置和使用
- springMVC(七)视图解析器的配置和使用
- SpringMVC的视图和视图解析器
- springMVC 配置多个视图解析器
- springmvc配置多视图解析器
- SpringMVC视图解析器:配置多个视图解析器的优先级
- springMVC配置视图解析器
- springmvc视图解析器配置
- SpringMvc的视图解析器与核心控制器配置以及使用Freemarker模板的配置
- 【SpringMVC】视图和解析器
- 【SpringMVC框架】小结+视图解析器配置前缀和后缀
- 【SpringMVC框架】小结+视图解析器配置前缀和后缀
- springmvc之视图和视图解析器
- SpringMVC中的视图和视图解析器
- SpringMVC中的视图和视图解析器
- springmvc之视图和视图解析器
- SpringMVC-5 视图和视图解析器
- SpringMVC配置JSON、JSP、FreeMark多视图解析器配置
- MVC之实体数据传递
- Android自定义View的三种实现方式
- 轻松弄清JavaScript中的offset、scroll、client
- java-内存泄漏
- 阿里巴巴Java开发手册——摘录
- SpringMVC多视图解析器的配置和使用
- 最简单的nginx分布式配置
- 第三章 primitive主数据类型和引用---认识变量
- 中国大陆开源镜像站汇总
- Spring学习,依赖注入(DI)、控制反转(IoC)和面向切面(AOP)
- java架构师应该懂得技术
- 《禅与 Objective-C 编程艺术》读书总结
- c++:_attribute_ 使用:
- 状压DP——hihoCoder 1048