tag mvc form docs spring spring-boot thymeleaf

mvc - taglib spring html



¿Cómo agrego un dialecto de tomillo para el arranque de primavera? (3)

Estoy usando Spring Boot y quiero agregar los comentarios condicionales de IE Thymeleaf dialect .

Lo he incluido en mi maven pom.xml, pero no está funcionando. ¿Cómo le digo a Thymeleaf que lo use?


Con el lanzamiento de Spring Boot 1.2.1, se han agregado algunos dialectos adicionales a la clase ThymeleafAutoConfiguration , que se detectarán automáticamente si se encuentran en la ruta de acceso de clases, que incluye:

Simplemente teniendo el JAR en el classpath es suficiente para que Spring Boot los registre.

Nota: Si está utilizando spring-boot-starter-thymeleaf entonces encontrará que LayoutDialect ya está incluido por defecto.


De hecho, creo que hay un defecto en ThymeleafAutoConfiguration . Veo el código donde se supone que debe recoger y agregar SpringSecurityDialect a Config si está en classpath, pero en mi depuración, esto simplemente no está sucediendo (solo LayoutDialect se dirige y se agrega a la configuración). Tengo la clase / jar SpringSecurityDialect en mi classpath, pero el siguiente bean nunca se agrega a la configuración por SpringBoot AutoConfig (ThymeleafAutoConfig.java, línea 97)

@Configuration @ConditionalOnClass({SpringSecurityDialect.class}) protected static class ThymeleafSecurityDialectConfiguration { protected ThymeleafSecurityDialectConfiguration() { } @Bean @ConditionalOnMissingBean public SpringSecurityDialect securityDialect() { return new SpringSecurityDialect(); } }

Al final, tuve que agregar un bean a mi configuración de Java personalizada para obtener el SpringSecurityDialog reconocido:

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

Esto funcionó por primera vez. ¿Puede hacer algunas pruebas para verificar que este es un problema conocido o no? Incluyo mi 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>


NOTA: Antes de intentar esto, tenga en cuenta que las versiones posteriores de Spring Boot incluyen algunos de los dialectos comunes listos para usar. Ver la answer @Robert Hunt. De otra manera:

Aquí hay un ejemplo de cómo agregar beans Dialect, que Spring Boot detectará y utilizará automágicamente (vea el código LayoutDialect y el miembro dialectos de la clase ThymeleafDefaultConfiguration). En su caso, agregue lo siguiente en una de sus clases @Configuration :

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

Spring Boot, en la clase Thymeleaf AutoConfiguration, agregará automáticamente cualquier Beans que implemente la interfaz IDialect.