使用视图名后缀来判断选择相应的视图解析器
自定义一个视图解析器,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 implements ViewResolver { |
10 | |
11 | private Map<String, ViewResolver> resolvers; |
12 | |
13 | @Override |
14 | public View resolveViewName(String viewName, Locale locale) |
15 | throws Exception { |
16 | int n = viewName.lastIndexOf( "_" ); // 获取 |
17 | // viewName(modelAndView中的名字)看其有没有下划线 |
18 | if (n == (- 1 )) |
19 | return null ; // 没有则直接返回空 |
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 | return resolver.resolveViewName(viewName, locale); |
29 | return null ; |
30 | } |
31 | |
32 | public Map<String, ViewResolver> getResolvers() { |
33 | return resolvers; |
34 | } |
35 | |
36 | public void setResolvers(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 | } |