Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MessageSource始终返回默认消息_Java_Spring - Fatal编程技术网

Java MessageSource始终返回默认消息

Java MessageSource始终返回默认消息,java,spring,Java,Spring,我试图在春季使用MessageSource注入文本消息。我编写的程序编译得很好,但它总是打印出默认消息,而不是从.properties文件中获取正确的值。我一点线索也没有 下面是尝试注入文本的Circle类: @Component public class Circle implements Shape { @Resource private Point center; @Autowired private Messag

我试图在春季使用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/>
有人知道我的情况会出什么问题吗

更新 谢谢你的建议。我正在调试,这里好像出了什么问题:

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,因此它决定呈现默认消息。但是我仍然不太明白什么是ParentMessageSource,以及它如何(不)为null?

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

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

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

您拼写错误了bean id

您编写了“messageSource”而不是“messageSource


您必须具有消息资源bean的id,并且它应该始终是“messageSource”

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

messages.properties位于何处。它是否位于src文件夹中。它位于名为properties的文件夹中,该文件夹与src位于同一文件夹中。但是,我确实尝试将其移动到src中,以查看它是否有效。您是否可以这样尝试..在src中创建一个包(com.messages),并将messages.properties放入包中…然后尝试此。。我刚试过。没用。同时,我通过调试发现了一些东西。我已经更新了我的帖子。看看这是否能为你提供线索。。谢谢我修好了。我用的是maven,可能是因为我搞砸了文件夹结构。因此,我在默认的src/main/resources文件夹中重新创建了另一个maven项目,其中包含属性和xml文件。问题解决了!除了Alexis的回答之外,我相信spring会创建一个默认的空消息源,如果找不到(在本例中使用了错误的名称),这样就不会出现注入错误。
    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource resourceBundleMessageSource =
                new ResourceBundleMessageSource();
        resourceBundleMessageSource.setBasename(I18_PATH_TEMPLATE + "email_welcome");
        resourceBundleMessageSource.setDefaultEncoding("UTF-8");
        return resourceBundleMessageSource;
    }