将thymeleaf版本2.14迁移到3.0不能找到消息属性

Thymeleaf版本2.14正确拾取message.properties文件。 迁移到3.0之后,它给错误了hello.MESSAGE_en_US ??。 但在javacode通过自动装配messsagesource

messageSource.getMessage( "hello.MESSAGE",null, Locale.getDefault()) ->Hello App 

项目结构

  src/main/ -java -com.cando -controllers -resources -messages_en.properties -spring.properties -webapp -WEB-INF -templates -index.html 

的index.html

 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> <head> <title>Helllo</title> </head> <body> <p th:text="#{hello.MESSAGE}">Hello App!</p> </body> </html> 

messages_en.properties

 hello.MESSAGE=Hello App 

配置

  @Bean public ResourceBundleMessageSource messageSource() { ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource(); resourceBundleMessageSource.setBasename("messages"); resourceBundleMessageSource.setBasename("spring"); return resourceBundleMessageSource; } 

在您的配置文件中,您将setBasename()消息 ,然后重写值为spring 。 我认为ResourceBundleMessageSource只是看不到你的消息文件,你应该像这样添加它: setBasenames("messages","spring") 。 试试看,并告诉它是否工作:)

我想我找到了解决办法

在配置SpringTemplateEngine时,可以显式设置messageSource和messageResolver。

对我来说,这个工作。

我在kotlin的代码:

 @Configuration @ComponentScan open class ThymeleafConfig { @Autowired lateinit var applicationContext: ApplicationContext @Autowired lateinit var messageSource: MessageSource @Autowired lateinit var messageResolver: SpringMessageResolver @Bean open fun viewResolver(): ViewResolver = ThymeleafViewResolver().apply { templateEngine = templateEngine() characterEncoding = "UTF-8" } fun templateEngine(): TemplateEngine = SpringTemplateEngine().apply { enableSpringELCompiler = true setTemplateResolver(templateResolver()) setMessageSource(messageSource) addMessageResolver(messageResolver) } fun templateResolver(): ITemplateResolver = SpringResourceTemplateResolver().apply { prefix = "file:./web/templates/" suffix = ".html" templateMode = TemplateMode.HTML cacheTTLMs = 0 isCacheable = false setApplicationContext(applicationContext) } } @Component class MessageResolverImpl: SpringMessageResolver() { } 

和messageSource bean:

 @Bean open fun messageSource(): MessageSource { val source = ReloadableResourceBundleMessageSource() source.setBasename("classpath:messages") source.setUseCodeAsDefaultMessage(true) source.setDefaultEncoding("UTF-8") return source } 

希望这会帮助你

Interesting Posts