Настройка нескольких распознавателей шаблонов для одного экземпляра Spring Boot - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь настроить второй распознаватель шаблонов для использования Thymeleaf.Мне также нужен распознаватель по умолчанию, который выглядит в папке templates, но что бы я ни пытался, я получаю только один распознаватель.

В моем проекте уже есть файл конфигурации yaml, который содержит:

thymeleaf:
    mode: LEGACYHTML5
    cache: false

В качестве первого шага я попытался добавить компонент конфигурации:

@Configuration
@EnableWebMvc
public class ThymeleafConfiguration extends WebMvcConfigurerAdapter implements ApplicationContextAware
{

    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException
    {
        this.applicationContext = applicationContext;
    }

    @Bean
    public TemplateEngine templateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver());
        return engine;
    }

    private ITemplateResolver templateResolver() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setApplicationContext(applicationContext);
        resolver.setPrefix("/public/");
        resolver.setTemplateMode("HTML");
        return resolver;
    }

}

Но я никогда не вижу второго распознавателя в org.thymeleaf.TemplateRepository, просто по умолчанию.

Кроме того, я попытался изменить YAML-файл следующим образом:

thymeleaf:
    -
      mode: LEGACYHTML5
      cache: false
      prefix: classpath:/public/
    -
      mode: LEGACYHTML5
      cache: false
      prefix: classpath:/templates/

Но, опять же, я создал только один распознаватель.

Кто-нибудь знает, как это сделать, или видит, кто яделать неправильно?

1 Ответ

0 голосов
/ 02 июня 2018

Если вы хотите добавить несколько распознавателей, вы можете использовать engine.addTemplateResolver вместо engine.setTemplateResolver() или использовать setTemplateResolvers(), который принимает Set.

@Configuration
@EnableWebMvc
public class ThymeleafConfiguration extends WebMvcConfigurerAdapter implements ApplicationContextAware
{

    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException
    {
        this.applicationContext = applicationContext;
    }

    @Bean
    public TemplateEngine templateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.addTemplateResolver(templateResolverPublic());
        engine.addTemplateResolver(templateResolverTemplates());
        return engine;
    }

    private ITemplateResolver templateResolverPublic() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setApplicationContext(applicationContext);
        resolver.setPrefix("/public/");
        resolver.setTemplateMode("HTML");
        return resolver;
    }

    private ITemplateResolver templateResolverTemplates() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setApplicationContext(applicationContext);
        resolver.setPrefix("/templates/");
        resolver.setTemplateMode("HTML");
        return resolver;
    }

}

PS С другой стороны, если вы хотите использовать возможности автоконфигурации загрузки Spring, вам следует избегать настройки конфигурации вручную (как вы делали это в своем классе конфигурации) и вместо этого просто определять свойства в YAML, которые SpringBoot будет использовать и настроит ваш шаблонный движокЕсли вы вручную укажете свою конфигурацию, при загрузке пружины не будет дополнительно настроен механизм / распознаватели Thymeleaf, поэтому свойства YAML в отношении заданных вами конфигураций не будут использоваться, т.е. вы в основном переопределяете конфигурации загрузочных пружин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...