thymeleaf 版本 2.14 到 3.0 的迁移未找到消息属性
Posted
技术标签:
【中文标题】thymeleaf 版本 2.14 到 3.0 的迁移未找到消息属性【英文标题】:Migration of thymeleaf version 2.14 to 3.0 not finding message properties 【发布时间】:2016-09-01 08:30:33 【问题描述】:Thymeleaf 2.14 版正在正确获取 message.properties 文件。迁移到 3.0 后,出现错误 ??hello.MESSAGE_en_US??。 但是在javacode中通过自动装配messagesource
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;
【问题讨论】:
【参考方案1】:我想我找到了解决办法
在配置 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
希望对你有帮助
【讨论】:
感谢它通过设置 templateEngine.setMessageSource( messageSource );【参考方案2】:在你的配置文件中你 setBasename()
到 messages 然后覆盖值到 spring。我认为ResourceBundleMessageSource
只是看不到您的 messages 文件,您应该像这样添加它:setBasenames("messages","spring")
。试一试,看看它是否有效:)
【讨论】:
尝试使用 setBasenames("messages","spring") 但问题没有解决以上是关于thymeleaf 版本 2.14 到 3.0 的迁移未找到消息属性的主要内容,如果未能解决你的问题,请参考以下文章
解决"libc.so.6: version `GLIBC_2.14' not found",系统的glibc版本太低