spring3mvc自定义多视图解析器

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

package com.it.app.web;

import java.util.Locale;
import java.util.Map;

import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;

public class MultiViewResover implements ViewResolver { 
 
    private Map<String, ViewResolver> resolvers; 
 
    @Override 
    public View resolveViewName(String viewName, Locale locale) 
            throws Exception { 
        int n = viewName.lastIndexOf("_"); // 获取 
                                            // viewName(modelAndView中的名字)看其有没有下划线 
        if (n == (-1)) 
            return null; // 没有则直接返回空 
        // 有的话截取下划线后面的字符串 这里一般是jsp,ftl,vm与配置文件中的<entry key="ftl">的key匹配 
        String suffix = viewName.substring(n + 1); 
        // 根据下划线后面的字符串去获取托管的视图解析类对象 
        ViewResolver resolver = resolvers.get(suffix); 
 
        // 取下划线前面的部分 那时真正的资源名.比如我们要使用hello.jsp 那viewName就应该是hello_jsp 
        viewName = viewName.substring(0, n); 
        if (resolver != null) 
            return resolver.resolveViewName(viewName, locale); 
        return null; 
    } 
 
    public Map<String, ViewResolver> getResolvers() { 
        return resolvers; 
    } 
 
    public void setResolvers(Map<String, ViewResolver> resolvers) { 
        this.resolvers = resolvers; 
    } 
} 


配置spring的mvc文件
<!-- 自定义多视图解析器 -->
    <bean id="viewResolver" class="com.jw.app.web.MultiViewResover">
		<property name="resolvers">
			<map>
				<entry key="jsp">
					<bean
						class="org.springframework.web.servlet.view.InternalResourceViewResolver">
						<property name="prefix" value="/WEB-INF/views/jsp/" />
						<property name="suffix" value=".jsp" />
					</bean>
				</entry>
				<!-- 此处其他视图解析器 -->
			</map>
		</property>
	</bean>

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

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


 


你可能感兴趣的:(mvc,Spring3,解析器,多视图)