Как добавить тимелеарский диалект к загрузке spring?
Я использую Spring Boot, и я хочу добавить условные комментарии IE Тимелеафа.
Я включил его в свой maven pom.xml, но он не работает. Как сказать Тимелеафу использовать его?
Ответы
Ответ 1
ПРИМЕЧАНИЕ.. Прежде чем пытаться это сделать, обратите внимание, что более поздние версии Spring Boot включают некоторые из распространенных диалектов из коробки. См. @Robert Hunt ответ. В противном случае:
Вот пример здесь добавления Dialect beans, который Spring Boot будет автоматически обнаруживать и использовать (см. код LayoutDialect и член диалектов класса ThymeleafDefaultConfiguration). В вашем случае добавьте следующее из одного из ваших классов @Configuration
:
@Bean
public ConditionalCommentsDialect conditionalCommentDialect() {
return new ConditionalCommentsDialect();
}
Spring Загрузка в классе ThymeleafAutoConfiguration автоматически добавит любой Beans, который реализует интерфейс IDialect.
Ответ 2
С выпуском Spring Boot 1.2.1 в класс ThymeleafAutoConfiguration добавлено несколько дополнительных диалектов, которые будут автоматически обнаружены, если они включены путь к классам, включая:
Просто наличие JAR в пути к классам достаточно для Spring Boot для их регистрации.
Примечание. Если вы используете spring-boot-starter-thymeleaf
, вы обнаружите, что LayoutDialect уже включен по умолчанию.
Ответ 3
Я действительно думаю, что есть дефект в ThymeleafAutoConfiguration. Я вижу код, где он должен собирать и добавлять SpringSecurityDialect в Config, если он находится в пути к классам, но в моей отладке это просто не происходит (только LayoutDialect получает направленность и добавляется в конфигурацию). У меня есть класс /jar SpringSecurityDialect для моего пути к классам, но bean ниже никогда не добавляется в конфигурацию SpringBoot AutoConfig (ThymeleafAutoConfig.java, строка 97)
@Configuration
@ConditionalOnClass({SpringSecurityDialect.class})
protected static class ThymeleafSecurityDialectConfiguration {
protected ThymeleafSecurityDialectConfiguration() {
}
@Bean
@ConditionalOnMissingBean
public SpringSecurityDialect securityDialect() {
return new SpringSecurityDialect();
}
}
В конце концов, мне пришлось фактически добавить bean в мою конфигурацию Java, чтобы распознать SpringSecurityDialog:
@Bean
public SpringSecurityDialect securityDialect() {
return new SpringSecurityDialect();
}
Это сработало впервые. Можете ли вы провести несколько тестов, чтобы проверить, что это известная проблема или нет? Я включаю свой pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>