thymeleaf 版本 2.14 到 3.0 的迁移未找到消息属性
Migration of thymeleaf version 2.14 to 3.0 not finding message properties
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
只是没有看到您的 messages 文件,您应该像这样添加它:setBasenames("messages","spring")
。试一试,看看它是否有效:)
我想我找到了解决方案
配置 SpringTemplateEngine 时,可以显式设置 messageSource 和 messageResolver。
对我来说,这行得通。
我的科特林代码:
@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
}
希望对您有所帮助
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
只是没有看到您的 messages 文件,您应该像这样添加它:setBasenames("messages","spring")
。试一试,看看它是否有效:)
我想我找到了解决方案
配置 SpringTemplateEngine 时,可以显式设置 messageSource 和 messageResolver。
对我来说,这行得通。
我的科特林代码:
@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
}
希望对您有所帮助