我有一个现有的 Spring Boot 应用程序,它使用 JSP 作为 View 。我想逐步将 View 技术转移到 Thymeleaf。
JSP View 解析器在 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 添加第二个 View 解析器,用于不作为 JSP 存在的 View ?这样应用程序在请求 View 时会尝试两个 View 解析器。
编辑
我也尝试过以下配置,但没有成功:
@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;
}
最佳答案
您可以尝试通过 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的另一个有用的答案
关于java - 为 JSP 和 Thymeleaf 设置两个模板解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41323054/