为JSP和Thymeleaf

时间:2016-12-25 17:12:07

标签: java spring-boot thymeleaf

我有一个现有的Spring Boot应用程序,它使用JSP进行视图。我想逐步将视图技术转移到Thymeleaf。

JSP视图解析器在application.properties中设置:

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

JSP位于:

src/main/resources/META-INF/resources/WEB-INF/views/

是否可以为Thymeleaf添加第二个视图解析器,以用于不存在为JSP的视图?这样应用程序在请求视图时会尝试两个视图解析器。

修改

我也尝试过以下配置,但没有成功:

@Bean
public InternalResourceViewResolver jspViewResolver() {
    final InternalResourceViewResolver vr = new InternalResourceViewResolver();
    vr.setPrefix("/META-INF/resources/WEB-INF/views/");
    vr.setSuffix(".jsp");
    vr.setViewClass(JstlView.class);
    vr.setOrder(1);
    return vr;
}

@Bean
public TemplateResolver templateResolver() {
    final ServletContextTemplateResolver tr = new ServletContextTemplateResolver();
    tr.setPrefix("templates/th/");
    tr.setSuffix(".html");
    tr.setTemplateMode("HTML5");
    return tr;
}

@Bean
public SpringTemplateEngine templateEngine() {
    final SpringTemplateEngine te = new SpringTemplateEngine();
    // te.addTemplateResolver(jspViewResolver());
    te.setTemplateResolver(templateResolver());
    te.setMessageSource(databaseMessageSource);
    return te;
}

@Bean
public ViewResolver viewResolver() {
    final ThymeleafViewResolver vr = new ThymeleafViewResolver();
    vr.setTemplateEngine(templateEngine());
    vr.setOrder(2);
    return vr;
}

1 个答案:

答案 0 :(得分:0)

您可以尝试通过Java Config进行配置。

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;

@SpringBootApplication
public class Application extends WebMvcConfigurerAdapter{

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.viewResolver(new ThymeleafViewResolver());

        InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
        internalResourceViewResolver.setViewClass(JstlView.class);
        internalResourceViewResolver.setPrefix("/WEB-INF/views");
        internalResourceViewResolver.setSuffix(".jsp");
        registry.viewResolver(internalResourceViewResolver);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

请记住,InternalResourceViewResolver应该是最后的。

SO上另一个有用的答案

  1. How to use multiple ViewResolvers in Spring?
  2. Spring MVC with multiple view resolvers