spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="meassageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="resource\message">
</property>
</bean>
</beans>
Main.java类文件
public class Main {
public static void main(String[] args) {
ApplicationContext context= new ClassPathXmlApplicationContext("spring.xml");
System.out.println(context.getMessage("emp", null, Locale.US));
}
}
我的属性文件位于src / resource文件夹中。文件名是mesaage_en_US.properties。 我也尝试过不同的文件名,如message.property,message_en.property,以及Locale.English,Locale.UK等不同的语言环境,但没有运气。 我将属性文件移动到src文件夹但得到相同的异常。 我正在接受例外。
Exception in thread "main" org.springframework.context.NoSuchMessageException: No message found under code 'emp' for locale 'en_US'.
at org.springframework.context.support.DelegatingMessageSource.getMessage(DelegatingMessageSource.java:65)
at org.springframework.context.support.AbstractApplicationContext.getMessage(AbstractApplicationContext.java:1234)
at org.beans.Main.main(Main.java:14)
请帮忙。
message_en_US.properties
emp=Hello Employee.
答案 0 :(得分:5)
我喜欢使用PropertySourcesPlaceholderConfigurer。 Here's a great tutorial让你开始。
基本上,您需要添加:
<context:property-placeholder location="classpath:foo.properties" />
到你的spring xml配置文件,其中“foo.properties”是类路径中资源的绝对路径。
然后你可以将它们注入这样的字段:
@Value( "${jdbc.url}" )
private String jdbcUrl;
其中“jdbc.url”是属性文件中的引用名称。
当然,@Value
无法在您static void main
内部使用,但我确实怀疑static void main
是您想要使用您的媒体资源的地方。你应该从Spring Bean访问它们。
答案 1 :(得分:0)
更改为
<property name="basename" value="message" />
将message_en_US.properties
与spring.xml
放在同一文件夹中。
编辑:在定义MessageSource
时,您的 bean 名称中存在拼写错误。它的名字应该是messageSource
。由于 meassageSource a
中的额外ApplicationContext
未能加载它。
答案 2 :(得分:0)
我认为这与this问题重复。基本上,它与您的bundle和代码中指定的语言环境之间的不匹配有关。
答案 3 :(得分:0)
我没有从ApllicationContext
收到消息,而是从MeassageSource
本身收到消息。我像这样改变了我的spring.xml
<bean id="employee" class="org.bean.Employee" >
<property name="id" value="1"/>
<property name="name" value=""/>
<property name="dept" value=""/>
<property name="messages" ref="messageSource"/>
</bean>
现在我从messages.getMessage(this.messages.getMessage("emp", null, Locale.UK))
班级致电Employee
。它的工作。
答案 4 :(得分:0)
我已经重现了您的错误并发现了问题。这与Spring没有找到捆绑包有关。我认为您应该在异常之前收到警告,并显示以下消息:
WARNING: ResourceBundle [resource\message] not found for MessageSource: Can't find bundle for base name resource\message, locale en_US
这是暗示。问题与您的项目结构以及指定setBasename属性时如何搜索包有关。请查看this。
无论如何,我认为你应该将你的捆绑包放在更标准的位置src / main / resources中。如果遵循此约定,则应定义messageSource bean,如下所示:
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="message" />
</bean>
使用这种方法,您的示例应该生成所需的行:
Hello Employee。