2016-12-25 2 views
1

У меня есть приложение Spring Spring, которое использует JSP для представлений. Я хотел бы постепенно продвигать технологию просмотра до Тимелеафа.Настройте два шаблонных преобразователя для 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; 
} 

ответ

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
+0

Это приводит к «org.thymeleaf.exceptions.TemplateInputException: Ошибка разрешения шаблона "домой", шаблон не может существовать или может не быть доступным ни одним из настроенных шаблонов Resolvers ", например, если он не пытается использовать второй вариант, который является jsp view-respover, который сможет разрешить« домашний ». Я попытался также установить порядок отображения в вашем примере, без каких-либо последствий. – yglodt

+0

@yglodt Вы настраиваете префиксы и суффиксы для вашего конкретного случая на обоих разрешениях? – marknorkin

+0

проверить мой обновленный вопрос. – yglodt