Как добавить диалект тимелист в весенний ботинок?
Я использую Spring Boot, и я хочу добавить условные комментарии IE диалект Thymeleaf.
Я включил его в свой maven pom.xml, но он не работает. Как я скажу Thymeleaf использовать его?
3 ответа
ПРИМЕЧАНИЕ. Прежде чем пытаться это сделать, обратите внимание, что более поздние версии Spring Boot включают некоторые распространенные диалекты из коробки. Смотрите ответ @Robert Hunt. Иначе:
Здесь приведен пример добавления bean-компонентов Dialect, которые Spring Boot будет автоматически обнаруживать и использовать (см. Код LayoutDialect и член dialects класса ThymeleafDefaultConfiguration). В вашем случае добавьте следующее в один из ваших @Configuration
классы:
@Bean
public ConditionalCommentsDialect conditionalCommentDialect() {
return new ConditionalCommentsDialect();
}
Spring Boot в классе ThymeleafAutoConfiguration автоматически добавит любые компоненты Bean, реализующие интерфейс IDialect.
С выпуском Spring Boot 1.2.1 в класс ThymeleafAutoConfiguration было добавлено несколько дополнительных диалектов, которые будут автоматически обнаружены, если они находятся в пути к классам, включая:
Для того, чтобы Spring Boot зарегистрировал их, достаточно наличия JAR на пути к классам.
Примечание: если вы используете spring-boot-starter-thymeleaf
тогда вы обнаружите, что LayoutDialect уже включен по умолчанию.
Я на самом деле думаю, что есть дефект в 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();
}
}
В конце концов, мне пришлось добавить компонент в мою пользовательскую конфигурацию 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>