【发布时间】:2012-11-08 03:21:56
【问题描述】:
我正在尝试在 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/>
我将问候语和 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 以及它怎么可以(不)为空?
【问题讨论】:
-
messages.properties 所在的位置。在 src 文件夹中。
-
它位于一个名为 properties 的文件夹中,该文件夹与 src 位于同一文件夹中。但是我确实尝试将其移至 src 以查看它是否可以工作。
-
你能试试这样吗..在src中创建一个包(com.messages)并将messages.properties放入包中......然后试试这个..
-
我刚试过。没用。同时我通过调试发现了一些东西。我已经更新了我的帖子。看看这是否会为您提供任何线索.. 谢谢!
-
我修好了。我使用的是 maven,可能是因为我搞砸了文件夹结构。所以我在其默认的 src/main/resources 文件夹中重新创建了另一个具有属性和 xml 文件的 maven 项目。问题解决了!