我使用的是Spring Boot,我想添加IE conditional comments Thymeleaf dialect。
我已将它包含在我的maven pom.xml中,但它无效。我如何告诉Thymeleaf使用它?
答案 0 :(得分:31)
注意:在尝试此操作之前,请注意更高版本的Spring Boot包含一些开箱即用的常用方言。请参阅@Robert Hunt的answer。否则:
有一个添加Dialect bean的示例here,Spring Boot将自动检测和使用它(请参阅LayoutDialect代码和ThymeleafDefaultConfiguration类的方言成员)。在您的情况下,添加以下@Configuration
个类中的以下内容:
@Bean
public ConditionalCommentsDialect conditionalCommentDialect() {
return new ConditionalCommentsDialect();
}
在ThymeleafAutoConfiguration类中,Spring Boot会自动添加任何实现IDialect接口的Beans。
答案 1 :(得分:12)
随着Spring Boot 1.2.1的发布,ThymeleafAutoConfiguration类增加了一些额外的方言,如果它们在类路径上,将自动检测到:
只需在类路径上使用JAR就足以让Spring Boot注册它们。
注意:如果您使用的是spring-boot-starter-thymeleaf
,那么您会发现默认情况下已包含LayoutDialect。
答案 2 :(得分:5)
我实际上认为ThymeleafAutoConfiguration存在缺陷。我看到它应该拾取的代码并将SpringSecurityDialect添加到Config,如果它在类路径上,但在我的调试中,这根本不会发生(只有LayoutDialect被定向并添加到配置中)。我的classpath上有SpringSecurityDialect类/ jar,但SpringBoot AutoConfig(ThymeleafAutoConfig.java,第97行)从未将下面的bean添加到配置中
@Configuration
@ConditionalOnClass({SpringSecurityDialect.class})
protected static class ThymeleafSecurityDialectConfiguration {
protected ThymeleafSecurityDialectConfiguration() {
}
@Bean
@ConditionalOnMissingBean
public SpringSecurityDialect securityDialect() {
return new SpringSecurityDialect();
}
}
最后,我必须在我的自定义Java配置中添加一个bean才能识别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>