将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 }
希望这会帮助你