gpt4 book ai didi

java - MessageSource 始终返回默认消息

转载 作者:搜寻专家 更新时间:2023-10-31 20:04:21 24 4
gpt4 key购买 nike

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

这是尝试注入(inject)文本的 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/>

然后我将问候语和 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 为空,因此它决定呈现默认消息。但我还是不太明白什么是 parentMesssageSource 以及它怎么可以(不)为 null?

最佳答案

您必须使用 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;
}

关于java - MessageSource 始终返回默认消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13281911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com