2016-05-06 8 views
3

Thymelefe Version 2.14 nahm Nachricht.properties-Datei korrekt ab. Nach der Migration auf 3.0 gibt es den Fehler "hello.MESSAGE_en_US ??". Aber in javacode von messsagesourceMigration von Thymeleleaf Version 2.14 zu Version 3.0, die Nachrichteneigenschaften nicht findet

messageSource.getMessage("hello.MESSAGE",null, Locale.getDefault()) ->Hello App 

Die Struktur Projekt

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 

Konfi autowiring g

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

Antwort

1

In Ihrer Konfigurationsdatei, die Sie setBasename() zu Nachrichten und dann Wert Feder außer Kraft setzen. Ich denke, ResourceBundleMessageSource sieht einfach nicht Ihre Nachrichten Datei, und Sie sollten es hinzufügen wie: setBasenames("messages","spring"). Probieren Sie es aus und sagen, ob es funktioniert :)

+0

versucht, durch setBasenames ("Nachrichten", "Frühling"), aber Problem mit löste nicht –

1

Ich glaube, ich fand Lösung

Während Sie SpringTemplateEngine konfigurieren ist es möglich, explizit festgelegt Message und messageResolver.

Für mich funktioniert das.

Mein Code in 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() { } 

und Message Bohne:

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

Hope this Sie helfen

+0

Dank es hat funktioniert, indem Sie templateEngine.setMessageSource (messageSource); –

Verwandte Themen