Как добавить диалект тимелист в весенний ботинок?

Я использую 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>
Другие вопросы по тегам