2016-05-06 47 views
3

Thymeleaf版本2.14正确地提取message.properties文件。迁移到3.0之后,它给出了错误?? hello.MESSAGE_en_US ??。 但在javacode通过自动装配messsagesource将thymeleaf版本2.14迁移到3.0找不到消息属性

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 

CONFI摹

@Bean 
    public ResourceBundleMessageSource messageSource() { 
     ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource(); 
     resourceBundleMessageSource.setBasename("messages"); 
     resourceBundleMessageSource.setBasename("spring"); 
     return resourceBundleMessageSource; 
    } 

回答

1

在您的配置文件,您setBasename()消息,然后覆盖价值春天。我认为ResourceBundleMessageSource只是没有看到你的消息文件,你应该添加它像:setBasenames("messages","spring")。给它一个尝试,并告诉我们,如果工程:)

+0

使用setBasenames( “信息”, “春”),但问题尝试没有解决 –

1

我想我找到解决方案

当你配置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 
open fun messageSource(): MessageSource { 
    val source = ReloadableResourceBundleMessageSource() 
    source.setBasename("classpath:messages") 
    source.setUseCodeAsDefaultMessage(true) 
    source.setDefaultEncoding("UTF-8") 
    return source 
} 

希望这将帮助你

+0

感谢它通过设置templateEngine.setMessageSource(messageSource); –