我不得不定义一个模板解析器来让自定义方言工作,然而这破坏了Thymeleaf模板的自动重新加载。如何重新启用此功能?或者,如何在不定义模板解析器的情况下添加自定义方言?
@Configuration
public class ThymeleafConfig {
@Bean
public SpringTemplateEngine templateEngine(TagCacheService tagCacheService) {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
ClassLoaderTemplateResolver primaryResolver = new ClassLoaderTemplateResolver();
primaryResolver.setPrefix("templates/");
primaryResolver.setSuffix(".html");
primaryResolver.setTemplateMode(TemplateMode.HTML);
primaryResolver.setCharacterEncoding("UTF-8");
primaryResolver.setOrder(0);
primaryResolver.setCheckExistence(true);
templateEngine.addTemplateResolver(primaryResolver);
templateEngine.addDialect(new LayoutDialect());
templateEngine.addDialect(new SpringSecurityDialect());
templateEngine.addDialect(new MyDialect(tagCacheService));
return templateEngine;
}
}
发布于 2020-06-10 12:35:06
我刚刚检查了org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration
的源代码,我看到那里的其他方言是通过将方言的一个实例声明为bean来注册的。所以也许可以试一下?
@Bean
public MyDialect myDialect(TagCacheService tagCacheService) {
return new MyDialect(tagCacheService);
}
发布于 2020-06-11 12:06:06
若要在自定义模板冲突解决程序上启用自动重新加载模板,请将冲突解决程序的setCacheable
属性设置为false。您可以从应用程序属性中读取此值,以使其更加通用。
// Get value from config
@Value("${spring.thymeleaf.cache}")
private boolean enableCache;
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
ClassLoaderTemplateResolver primaryResolver = new ClassLoaderTemplateResolver();
[ ... ]
primaryResolver.setCacheable(enableCache); // Set to false to enable reloading
[ ... ]
}
https://stackoverflow.com/questions/62301178
复制相似问题