【问题标题】:Migration of thymeleaf version 2.14 to 3.0 not finding message propertiesthymeleaf 版本 2.14 到 3.0 的迁移未找到消息属性
【发布时间】: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;
    }

【问题讨论】:

    标签: spring spring-mvc thymeleaf properties-file


    【解决方案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") 但问题没有解决
    猜你喜欢
    • 2016-08-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多