springmvc 多视图解析 (thymeleaf和jsp)

spring下使用多视图解析器解析

根据优先级选择先用html视图解析器解析,如果指定路径不存在html的模板,则换到jsp视图解析器

maven配置

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring4</artifactId>
    <version>3.0.2.RELEASE</version>
</dependency>

spring-mvc.xml

<!-- **************************************************************** -->
<!--  THYMELEAF-SPECIFIC ARTIFACTS                                    -->
<!--  TemplateResolver <- TemplateEngine <- ViewResolver              -->
<!-- **************************************************************** -->
<!-- thymeleaf的视图解析器 -->
<!-- Thymeleaf View Resolver - implementation of Spring's ViewResolver interface -->
<!--<bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver">-->
<bean id="viewResolver" class="com.cn.web.util.HtmlResourceView">
    <property name="templateEngine" ref="templateEngine"/>
    <property name="characterEncoding" value="UTF-8"/>
    <!--<property name="viewNames" value="html/*" />-->
    <property name="order" value="0"/>
</bean>

<!-- 配置SpringMVC的视图解析器 -->
<!--<bean class="org.springframework.web.servlet.view.RedirectView .InternalResourceViewResolver">-->
<bean id="jspResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
    <!--<property name="viewNames" value="jsp/*" />-->
    <property name="order" value="1"/>
</bean>

<!-- Thymeleaf Template Engine (Spring4-specific version) -->
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
    <property name="templateResolvers">
        <set>
            <ref bean="templateResolver"/>
        </set>
    </property>
</bean>

<!-- Thymeleaf Template Resolver -->
<bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".html"/>
    <property name="templateMode" value="HTML"/>
</bean>

HtmlResourceView.java

import org.springframework.web.servlet.View;
import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;

import java.io.File;
import java.util.Locale;

/**
 * Describe:
 * User:tangjing
 * Date:17/1/16
 * Time:下午5:18
 * 重写resolveViewName方法实现多视图的方法
 */
public class HtmlResourceView extends ThymeleafViewResolver {
    @Override
    public View resolveViewName(String viewName, Locale locale) throws Exception {

    SpringResourceTemplateResolver servletContextTemplateResolver = (SpringResourceTemplateResolver) this.getWebApplicationContext().getBean("templateResolver");
    //servletContextTemplateResolver.initialize();
    String prefix = servletContextTemplateResolver.getPrefix().substring(1);
    String suffix = servletContextTemplateResolver.getSuffix();
    File   file   = new File(this.getServletContext().getRealPath("/") + prefix + viewName + suffix);
    if (!file.exists()) {
        return null;
    }
    return super.resolveViewName(viewName, locale);
}

}

文章目录
  1. 1. spring下使用多视图解析器解析
,