Миграция thymeleaf версии 2.14 в 3.0 без поиска свойств сообщения
Thymeleaf версии 2.14 принимал сообщение.файл свойств правильно. После перехода на 3.0, это дает ошибку ??привет.MESSAGE_en_US??. Но в javacode с помощью autowiring 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
Индекс.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.свойства
hello.MESSAGE=Hello App
Config
@Bean
public ResourceBundleMessageSource messageSource() {
ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource();
resourceBundleMessageSource.setBasename("messages");
resourceBundleMessageSource.setBasename("spring");
return resourceBundleMessageSource;
}
2 ответа:
В вашем конфигурационном файле вы
setBasename()
к сообщениям, а затем переопределите значение на spring. Я думаю, чтоResourceBundleMessageSource
просто не видит ваш файл сообщений, и вы должны добавить его следующим образом: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 }
Надеюсь, это поможет вам