spring3mvc自定义多视图解析器

使用视图名后缀来判断选择相应的视图解析器
自定义一个视图解析器,MultiViewResover.java

01 package com.it.app.web;
02  
03 import java.util.Locale;
04 import java.util.Map;
05  
06 import org.springframework.web.servlet.View;
07 import org.springframework.web.servlet.ViewResolver;
08  
09 public class MultiViewResover implementsViewResolver {
10   
11     privateMap<String, ViewResolver> resolvers;
12   
13     @Override
14     publicView resolveViewName(String viewName, Locale locale)
15             throwsException {
16         intn = viewName.lastIndexOf("_"); // 获取
17                                             // viewName(modelAndView中的名字)看其有没有下划线
18         if(n == (-1))
19             returnnull// 没有则直接返回空
20         // 有的话截取下划线后面的字符串 这里一般是jsp,ftl,vm与配置文件中的<entry key="ftl">的key匹配
21         String suffix = viewName.substring(n + 1);
22         // 根据下划线后面的字符串去获取托管的视图解析类对象
23         ViewResolver resolver = resolvers.get(suffix);
24   
25         // 取下划线前面的部分 那时真正的资源名.比如我们要使用hello.jsp 那viewName就应该是hello_jsp
26         viewName = viewName.substring(0, n);
27         if(resolver != null)
28             returnresolver.resolveViewName(viewName, locale);
29         returnnull;
30     }
31   
32     publicMap<String, ViewResolver> getResolvers() {
33         returnresolvers;
34     }
35   
36     public voidsetResolvers(Map<String, ViewResolver> resolvers) {
37         this.resolvers = resolvers;
38     }
39 }

 

配置spring的mvc文件 

01 <!-- 自定义多视图解析器 -->
02     <bean id="viewResolver" class="com.jw.app.web.MultiViewResover">
03         <property name="resolvers">
04             <map>
05                 <entry key="jsp">
06                     <bean
07                         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
08                         <property name="prefix" value="/WEB-INF/views/jsp/" />
09                         <property name="suffix" value=".jsp" />
10                     </bean>
11                 </entry>
12                 <!-- 此处其他视图解析器 -->
13             </map>
14         </property>
15     </bean>

注意,如果已经配置了一个默认的视图解析器org.springframework.web.servlet.view.InternalResourceViewResolver,那么该自定义视图解析器必须放在默认视图解析器之前。
修改首页控制器返回的视图名称,加上"_jsp"后缀

1 @RequestMapping(value="/indexjsp")
2     public String index_jsp(){
3         return "index_jsp";
4     }

猜你喜欢

转载自tdcq.iteye.com/blog/1771299