我正在尝试将项目的字符串/消息存储在外部.properties
文件中。我想我已经把所有东西都搞定了,但我还是得到了:
org.springframework.context.NoSuchMessageException: No message found under code 'subtype.user.client' for locale 'null'.
每当我尝试:
String string = messageSource.getMessage("subtype.user.client", null, null);
我的spring xml配置文件如下。由于项目非常庞大,有很多bean,我有不同的spring xml配置文件定义了不同类型的bean,还有一个主spring.config.xml
文件将它们连接在一起。
名为messages.subtypes
subtype.user.user=User
subtype.user.client=Client props
subtype.user.staff=Staff
subtype.user.clerk=Clerk
subtype.user.secretary=Secretary
消息bean文件名为spring.messages.config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
<list>
<value>messages.subtypes</value>
</list>
</property>
</bean>
<bean id="myProjectLangs" class="myprojectbase.MyProjectLangs">
<property name="messageSource" ref="messageSource"></property>
</bean>
</beans>
通过spring.config.xml
<import resource="classpath:filename.xml"/>
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
<aop:aspectj-autoproxy />
<import resource="classpath:spring.messages.config.xml"/>
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" />
<context:annotation-config />
<context:component-scan base-package="myprojectbase"/>
</beans>
答案 0 :(得分:2)
您收到此错误是因为您将Locale
参数作为null传递。尝试
String string = messageSource.getMessage("subtype.user.client", null, Locale.ENGLISH);
即使您尚未定义文件messages.subtypes_en.properties
,也应该回退到messages.subtypes.properties
答案 1 :(得分:1)
我们会想到一些可能导致问题的代码:
messageSource
的bean。考虑删除其中一个。basename
上定义ReloadableResourceBundleMessageSource
的方式。查看用于setBasename
方法的JavaDoc,有一些形式的配置约定:设置单个基本名称,遵循未指定文件扩展名或语言代码的基本ResourceBundle约定,但与引用Spring资源位置的{@link ResourceBundleMessageSource}相反:用于“WEB-INF / messages.properties”,“WEB-INF / messages_en.properties”等的“WEB-INF / messages”。还支持XML属性文件:.g。 “WEB-INF / messages”也会查找并加载“WEB-INF / messages.xml”,“WEB-INF / messages_en.xml”等。
这表明,一旦将消息属性文件重命名为messages-subtypes.properties
,就应该将配置更改为<value>classpath:messages-subtypes</value>
,确保该文件位于类路径中,一切都应该开始工作。
答案 2 :(得分:0)
尝试将4m 24d
文件重命名为messages.subtypes
。