javax.servlet.jsp.JspTagException: No message found under code 'name' for locale 'zh_CN'.是国际化中的常见错误。
在说明问题之前,先简单说明一下xml中的配置。
首先你在xml里配置的MessageSource代码应该是这样的(只加载一个资源文件messages.properties):
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"></property>
</bean>
如果你要加载的资源属性文件有多个(属性文件名分别为messages1.properties,messages2.properties,messages3.properties),xml里的配置代码是这样的:
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>messages1</value>
<value>messages2</value>
<value>messages3</value>
</list>
</property>
</bean>
在上面的代码中,有以下几点需要注意:
1.如果你使用eclipse创建的工程是class和src分开的,那么资源属性文件一定要放在src目录以内
2.属性文件名的写法:
messages_zh_CN.properties (中文)(也可以省略_zh_CH后缀,写成messages.properties)
messages_en_US.properties (英文)
3.bean的id一定是messageSource不是messageResource ,这是Spring规定的。
4.因为Spring从classpath根路径下加载这些资源文件,所以这些文件应该放在根路径下。如果资源文件messages.properties不是在根路径下而在包com.test.msgs下的话,value标签的值就应该是这样的:
<value>com.test.msgs.messages</value>
注:Java JDK的标准 ResourceBundle 将点(.)视为包分隔符,这也意味着"test.theme" 等同于 "test/theme".
以上的注意事项是我从网上一篇博客中看到的,我补充了一些知识。
然而它们并没有解决我的问题。我依照上述注意事项检查我的代码,没有发现错误之处,所以我只好自己再找找其他的原因,最后还终于给找到了,是我犯了一个低级错误: 我没有为使用<spring:message>标签的JSP文件编写一个控制器来处理请求,而是直接请求了该JSP文件。
在解决了上面的失误之后,问题解决了!
参考文章: http://blog.sina.com.cn/s/blog_4cab775e01000a14.html