Spring:在locale'en_US'的代码下找不到任何消息

时间:2011-11-03 20:27:42

标签: java spring

的applicationContext-service.xml中

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list><value>messages</value></list>
    </property>
</bean>

我在/src/messages_en_US.properties下有messages_en_US.properties

registerForm.passwordNotMatch=Password does not match.

这段代码正在提出错误:

binding.addError(new FieldError(REGISTER_FORM, "passwordNotMatch", messageSource.getMessage("registerForm.passwordNotMatch", null, locale)));

错误:在代码'registerForm.passwordNotMatch'下找不到区域设置'en_US'的消息。

可能出现什么问题?

4 个答案:

答案 0 :(得分:12)

如果您改为:

,它是否有效
classpath:messages

我有经验,如果使用ReloadableResourceBundleMessageSource,在jsp中将找不到属性文件。在classpath:之前添加basename解决了我的问题。

即使我的项目由maven管理,我想你无论如何都可以尝试一下。

答案 1 :(得分:0)

我有同样的问题。我试过classpath:,但没有什么区别。结束在我的属性文件的最后一行放入回车符(因此光标位于下一行,即文件的末尾)。

此外,如果您正在使用Maven,并且将属性文件放置为/resources/xxxx.properties,则资源目录会自动拉入生成的战争中,因此不需要classpath:

答案 2 :(得分:0)

对于使用@Bean的{​​{1}}注释的用户。 为bundleMessageSource添加名称

  

name =“ messageSource”

使用与创建@Bean类中的MessageSource对象相同的名称

@RestController

然后在@RestController public class HelloWorldController { @Autowired private MessageSource messageSource; @GetMapping(path = "/hello-world-internationalized") public String helloWorldInternationalized(@RequestHeader(name = "Accept-Language", required = false) Locale locale) { return messageSource.getMessage("good.morning.message", null, locale); } }

@SpringBootApplication

引荐this link

答案 3 :(得分:-2)

我认为应该是<property name="basenames">而不是<property name="basename">