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