web-dev-qa-db-fra.com

Comment ajouter un dialecte à feuilles de thym à Spring Boot?

J'utilise Spring Boot et je veux ajouter le IE commentaires conditionnels dialecte Thymeleaf .

Je l'ai inclus dans mon maven pom.xml, mais cela ne fonctionne pas. Comment dire à Thymeleaf de l'utiliser?

24
xdhmoore

REMARQUE: Avant d'essayer, notez que les versions ultérieures de Spring Boot incluent certains des dialectes courants prêts à l'emploi. Voir @Robert Hunt's réponse . Autrement:

Il existe un exemple ici d'ajout de beans Dialect, que Spring Boot détectera et utilisera automatiquement (voir le code LayoutDialect et le membre dialectes de la classe ThymeleafDefaultConfiguration). Dans votre cas, ajoutez ce qui suit dans l'un de vos @Configuration Des classes:

@Bean
public ConditionalCommentsDialect conditionalCommentDialect() {
    return new ConditionalCommentsDialect();
}

Spring Boot, dans la classe ThymeleafAutoConfiguration, ajoutera automatiquement tous les Beans qui implémentent l'interface IDialect.

31
xdhmoore

Avec la sortie de Spring Boot 1.2.1, quelques dialectes supplémentaires ont été ajoutés à la classe ThymeleafAutoConfiguration qui seront automatiquement détectés s'ils sont sur le chemin de classe, notamment:

Le simple fait d'avoir le JAR sur le chemin de classe suffit à Spring Boot pour les enregistrer.

Remarque: Si vous utilisez spring-boot-starter-thymeleaf vous constaterez alors que le LayoutDialect est déjà inclus par défaut.

13
Robert Hunt

En fait, je pense qu'il y a un défaut dans ThymeleafAutoConfiguration . Je vois le code où il est censé récupérer et ajouter SpringSecurityDialect à la configuration s'il se trouve sur le chemin de classe, mais dans mon débogage, cela ne se produit tout simplement pas (seul LayoutDialect est dirigé et ajouté à la configuration). J'ai la classe/jar SpringSecurityDialect sur mon chemin de classe, mais le bean ci-dessous n'est jamais ajouté à la configuration par SpringBoot AutoConfig (ThymeleafAutoConfig.Java, ligne 97)

  @Configuration
@ConditionalOnClass({SpringSecurityDialect.class})
protected static class ThymeleafSecurityDialectConfiguration {
    protected ThymeleafSecurityDialectConfiguration() {
    }

    @Bean
    @ConditionalOnMissingBean
    public SpringSecurityDialect securityDialect() {
        return new SpringSecurityDialect();
    }
}

En fin de compte, j'ai dû ajouter un bean à ma configuration personnalisée Java pour que le SpringSecurityDialog soit reconnu:

@Bean
public SpringSecurityDialect securityDialect() {
    return new SpringSecurityDialect();
}

Cela a fonctionné la première fois. Pouvez-vous avoir des tests pour vérifier qu'il s'agit d'un problème connu ou non? J'inclus mon 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>
5
Tom Motley