Подтвердить что ты не робот

Как добавить тимелеарский диалект к загрузке spring?

Я использую Spring Boot, и я хочу добавить условные комментарии IE Тимелеафа.

Я включил его в свой maven pom.xml, но он не работает. Как сказать Тимелеафу использовать его?

4b9b3361

Ответ 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>