当前位置: 首页 > 工具软件 > noForm > 使用案例 >

关于javax.servlet.jsp.JspTagException: No message found under code 'name' for locale 'zh_CN'.错误的原因分析

苏弘盛
2023-12-01

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

 类似资料: