MessageSource始终返回默认消息

时间:2012-11-08 03:21:57

标签: java spring

我正在尝试使用Spring中的MessageSource注入文本消息。我编写的程序编译得很好,但它总是打印出默认消息,而不是从.properties文件中获取正确的值。我根本没有线索。

这是试图注入文本的Circle类:

 @Component
    public class Circle implements Shape {

        @Resource
        private Point center;
        @Autowired
        private MessageSource messageSource;

        public MessageSource getMessageSource() {
            return messageSource;
        }

        public void setMessageSource(MessageSource messageSource) {
            this.messageSource = messageSource;
        }

        public Point getCenter() {
            return center;
        }

        public void setCenter(Point center) {
            this.center = center;
        }

        @Override
        public void draw() {
            System.out.println(this.messageSource.getMessage("greeting", null, "Default Greeting", null));
            System.out.println(this.messageSource.getMessage("draw.circle", new Object[] {center.getX(), center.getY()}, "Required Drawing", null));

        }

这是bean配置文件的一部分:

...
    <bean id="center" class="java.awt.Point">
        <constructor-arg value="0" />
        <constructor-arg value="-20" />
    </bean>

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

    <context:component-scan base-package="com.myproject.spring"/>

    <context:annotation-config/>

我将greeting和draw.circle存储在messages.properties文件中并编写了一个主类。但输出总是:

Default Greeting  
Required Drawing

有人知道我的案子可能出错吗?

更新 感谢您的建议。我正在调试,似乎出现了问题:

public String getMessage(String code, Object[] args, String defaultMessage, Locale locale) {
        if (this.parentMessageSource != null) {
            return this.parentMessageSource.getMessage(code, args, defaultMessage, locale);
        }
        else {
            return renderDefaultMessage(defaultMessage, args, locale);
        }
    }

this.parentMessageSource为null,因此决定呈现默认消息。但是我还是不太明白什么是parentMesssageSource以及它是如何(不是)null?

4 个答案:

答案 0 :(得分:3)

您必须使用 id =“messageSource”而不是 id =“messageSour s e”。 对于所有使用Java配置的人,您必须将“messageSource()”作为方法名称

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource resourceBundleMessageSource =
                new ResourceBundleMessageSource();
        resourceBundleMessageSource.setBasename(I18_PATH_TEMPLATE + "email_welcome");
        resourceBundleMessageSource.setDefaultEncoding("UTF-8");
        return resourceBundleMessageSource;
    }

答案 1 :(得分:1)

可能,messageSource无法选择您的消息文件。 ResourceBundleMessageSource具有覆盖toString()方法以显示messageResource配置。尝试使用一次。您也可以在调试工具的帮助下注入messageSource对象,检查它是否已成功加载所有属性。

答案 2 :(得分:1)

你错误拼写了bean id

而不是&#39; messageSource &#39;,您已撰写&#39; messageSourse &#39;。

您必须拥有Message Resource bean的id,并且它应始终为&#39; messageSource&#39;。

答案 3 :(得分:0)

属性文件的扩展名应为.properties