0

春天.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.
4

5 回答 5

6

我喜欢为此使用PropertySourcesPlaceholderConfigurer这是一个很棒的教程,可以帮助您入门。

基本上,您需要添加:

<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 访问它们。

于 2013-07-28T20:44:36.500 回答
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上打电话。它的工作。

于 2013-07-29T11:04:10.427 回答
0

我认为这是从这个问题重复的。基本上,它与你的包和代码中指定的语言环境不匹配有关。

于 2013-07-28T22:07:00.973 回答
0

我已经重现了您的错误并发现了问题。这与 Spring 找不到捆绑包有关。我认为您应该在异常之前收到警告,并显示以下消息:

WARNING: ResourceBundle [resource\message] not found for MessageSource: Can't find bundle for base name resource\message, locale en_US

这就是暗示。该问题与您的项目结构以及在指定 setBasename 属性时如何搜索捆绑包有关。请看看这个

无论如何,我认为您应该将您的捆绑包放在更标准的位置 src/main/resources 中。如果你遵循这个约定,你的 messageSource bean 应该像这样定义:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="message" />
</bean>

使用这种方法,您的示例应该生成所需的行:

你好员工。

于 2013-07-29T16:48:39.150 回答
0

改成

<property name="basename" value="message" />

message_en_US.properties您的spring.xml.

编辑定义MessageSource.__ 它的名字应该是准确的messageSource。由于meassageSourcea中无法加载它。 ApplicationContext

于 2013-07-28T20:50:40.187 回答