使用视图名后缀来判断选择相应的视图解析器
自定义一个视图解析器,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 |
} |