当前位置: 首页 > 知识库问答 >
问题:

MessageSource始终返回默认消息

卢锋
2023-03-14

我正在尝试在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/>

我存储问候语和画图。圈入消息。属性文件,并编写了一个主类。但输出总是:

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);
        }
    }

这parentMessageSource为null,因此它决定呈现默认消息。但我仍然不太明白什么是ParentMessageSource,以及它如何可以(不)为null?

共有3个答案

郭鸿信
2023-03-14

您拼写错误了bean id

您编写的不是“MessageSource”,而是“MessageSourse”。

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

单于山
2023-03-14

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

韶景曜
2023-03-14

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

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource resourceBundleMessageSource =
                new ResourceBundleMessageSource();
        resourceBundleMessageSource.setBasename(I18_PATH_TEMPLATE + "email_welcome");
        resourceBundleMessageSource.setDefaultEncoding("UTF-8");
        return resourceBundleMessageSource;
    }
 类似资料:
  • 我在测试类的顶部有以下内容: 通过调试,我可以确认messageSource属性正在被模拟,并且不为null。测试用例最终达到这一点: 我确认我的消息属性文件中包含带有消息字符串的代码“DATA. IS. EMPTY”。我知道消息属性文件配置正确,因为我看到应用程序运行时消息出现在应用程序中。但是,在JUnit测试用例中,上面的getMessage返回为null。查看MessageSource的S

  • 我正在尝试在我的应用程序中实现暗模式。我决定使用共享首选项来保存当前的暗模式状态。问题是,除了SettingsActivity之外,共享首选项总是返回所有活动的默认值。 我试过: 使用而不是 更改首选项的名称 将更改为清单为false 正在清除应用程序缓存 删除应用程序数据 我的manifest.xml: 我的家庭活动的一部分: 我的设置活动:

  • 问题内容: 我希望模仿允许用户指定“默认”返回值的内置函数(如)的行为。我最初的尝试是这样做 问题是,如果用户希望成为其返回值,则此函数将引发异常。第二次尝试: 这解决了上述问题,并允许用户指定任何任意值,但是带来了麻烦,因为用户必须始终在其函数调用中进行指定;他们不能只提供最后。同样,可以使用,但如果用户偏爱该语法,则会阻止用户使用。 结合并提供了可行的解决方案,但感觉这需要付出很多努力。它还可

  • 问题内容: 我以前使用过媒体播放器,但从未遇到过此问题。每当我尝试使用MediaPlayer.create()时,该方法都会使我为null,并且无法播放声音。有什么我想念的吗? 我的sound.mp3在我的原始文件夹中,通过将声音拖到eclipse中的文件夹中,我将其放置在其中。请帮忙,因为我以前玩过声音,所以这真的困扰我:( 问题答案: 如果create() API由于某种原因失败,则返回nul

  • 问题内容: 尽管是有效的类,但以下代码会打印。 文档说方法返回 由 aClassName 命名的类对象,或者如果当前没有加载该名称的类。如果 aClassName 为,则返回。 我也试图获得当前的viewcontroller已加载但仍然得到 可能是什么问题? 更新: 即使尝试这样做,我仍然可以 问题答案: 该函数 确实 适用于(纯和Objective-C派生的)swift类,但是仅当您使用全限定名

  • 问题内容: 我觉得有点愚蠢,但它不起作用: 我有如果给定的用户是unicode。如果字符串中包含或,我想打印成功,但是我总是得到的结果。 问题答案: 隐式锚定到字符串的开头。如果要在字符串中搜索可以在字符串中任何位置的子字符串,则需要使用: 输出: 另外,Python Regexes不需要在开头和结尾都有一个。 最后,我添加到该行的末尾,因为我认为这就是您想要的。否则,您会得到类似的信息,但并不太