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 的迁移未找到消息属性的主要内容,如果未能解决你的问题,请参考以下文章

GLIBC_2.14 not found

docker私服搭建nexus3

解决"libc.so.6: version `GLIBC_2.14' not found",系统的glibc版本太低

glibc升级GLIBC_2.14,一定不要mv libc.so.6 libc.so.6_bak……

Scala路线图:跳过2.14,明年上Scala 3

使用 Spring Boot 和 Thymeleaf 将复选框映射到列表