package org.dy.ext.spring.web;
import java.util.Locale;
import java.util.Map;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
public class MultipleViewResolver extends UrlBasedViewResolver {
private Map<String, ViewResolver> resolvers;
@Override
protected View loadView(String viewName, Locale locale) throws Exception {
// TODO Auto-generated method stub
return internalResolveViewName(viewName, locale);
}
public View internalResolveViewName(String viewName, Locale locale)
throws Exception {
// 获得扩展名
int n = viewName.lastIndexOf(".");
if (n == -1)
return null;
String suffix = viewName.substring(n + 1);
String resolverViewKey = "";
// 查找 eg. zftl,ftl = oneResolver => ftl = oneResolver
for (String key : resolvers.keySet()) {
String[] arr = key.split(",");
for (String subViewName : arr) {
if (subViewName.equals(suffix)) {
resolverViewKey = key;
break;
}
}
}
// 取出对应的ViewResolver:
ViewResolver resolver = resolvers.get(resolverViewKey);
if (resolver != null)
return resolver.resolveViewName(viewName, locale);
// 没有找到对应的ViewResolver就抛异常
return null;
}
public Map<String, ViewResolver> getResolvers() {
return resolvers;
}
public void setResolvers(Map<String, ViewResolver> resolvers) {
this.resolvers = resolvers;
}
}
<bean id="viewResolver" class="org.dy.ext.spring.web.MultipleViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="resolvers"> <map> <entry key="jsp"> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> </bean> </entry> <!-- 其中的js/css表示当需要freemarker动态生成js/css文件 --> <entry key="ftl,zftl,js,css"> <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="cache"> <value>true</value> </property> <property name="viewClass"> <value> org.springframework.web.servlet.view.freemarker.FreeMarkerView </value> </property> <property name="contentType"> <value>text/html;charset=utf-8</value> </property> <property name="exposeSpringMacroHelpers"> <value>true</value> </property> </bean> </entry> </map> </property> </bean>