我实际上对我的Thymeleaf配置的一部分感到困惑。
我有一个位于classpath:/messages/web.properties
的属性文件。在我的配置中,定义了以下内容。
@Bean
public MessageSource messageSource() {
final ResourceBundleMessageSource messageSource;
messageSource = new ResourceBundleMessageSource();
messageSource.setDefaultEncoding("UTF-8");
messageSource.setBasename("messages/web");
return messageSource;
}
如果我使用此配置运行我的应用程序一切正常。来自属性文件的消息被注入Thymeleaf模板(如预期的那样)。
但是,如果我更改创建我的消息源的方法的名称,请重新启动我的应用程序并请求相同的页面...然后找不到我的web.properties
文件中的消息。
@Bean
public MessageSource webMessageSource() {
[...]
}
为什么消息资源的bean名称(=方法名称)对我的应用程序有影响?
为什么Thymeleaf模板引擎无法找到消息源webMessageSource
?
答案 0 :(得分:5)
在Thymeleaf源代码中进行了一些挖掘之后,我发现在SpringTemplateEngine
课程中,Javadoc明确指出:
它还将{@link SpringMessageResolver}配置为消息 解析器,并实现{@link MessageSourceAware}接口 为了让Spring自动设置{@link MessageSource} 在应用程序中使用(bean需要有id "为messageSource&#34)。如果需要这个Spring标准设置 重写,{@ link #setTemplateEngineMessageSource(MessageSource)} 可以使用。
重要的部分是 bean需要有id" messageSource"
如@ShinichiKai所述,Spring文档的this部分提到Spring中的MessageSource bean的名称必须是messageSource
。