Spring ThymileAF 2.14版到3.0版的迁移找不到消息属性

Spring ThymileAF 2.14版到3.0版的迁移找不到消息属性,spring,spring-mvc,thymeleaf,properties-file,Spring,Spring Mvc,Thymeleaf,Properties File,Thymeleaf 2.14版正确拾取message.properties文件。在迁移到3.0之后,它给出了错误??hello.MESSAGE\u en\u US??。 但在Java代码中,通过自动连接源代码 messageSource.getMessage( "hello.MESSAGE",null, Locale.getDefault()) ->Hello App 项目结构 src/main/ -java -com.cando

Thymeleaf 2.14版正确拾取message.properties文件。在迁移到3.0之后,它给出了错误??hello.MESSAGE\u en\u US??。 但在Java代码中,通过自动连接源代码

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>
配置

   @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() {    }
和消息源bean:

@Bean
open fun messageSource(): MessageSource {
    val source = ReloadableResourceBundleMessageSource()
    source.setBasename("classpath:messages")
    source.setUseCodeAsDefaultMessage(true)
    source.setDefaultEncoding("UTF-8")
    return source
}

希望这将帮助您

尝试使用setBasenames(“messages”、“spring”),但问题没有解决,因为通过设置templateEngine.setMessageSource(messageSource)它已经起到了作用;
@Bean
open fun messageSource(): MessageSource {
    val source = ReloadableResourceBundleMessageSource()
    source.setBasename("classpath:messages")
    source.setUseCodeAsDefaultMessage(true)
    source.setDefaultEncoding("UTF-8")
    return source
}