我正在使用(学习......)Struts 1.3来构建MVC Web应用程序。为清楚起见,我想包含多个<message-resources>
元素 - 将消息分离为应用程序特定模块的文件。
您可以为您的网络应用定义一个或多个
<message-resources>
元素;模块可以定义自己的资源包。可以在应用程序中同时使用不同的包,“key”属性用于指定所需的包。
但是,当我包含多个元素时,JSP会导致异常,说明密钥缺少消息:
SEVERE: Servlet.service() for servlet jsp threw exception javax.servlet.jsp.JspException: Missing message for key "label.username" in bundle "(default bundle)" for locale en_GB
at org.apache.struts.taglib.bean.MessageTag.doStartTag(MessageTag.java:233)
at org.apache.jsp.index_jsp._jspx_meth_bean_005fmessage_005f0(index_jsp.java:197)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:107) ~~~snip~~~
这是XML:
<struts-config>
~~~snip~~~
<message-resources parameter="resources.DefaultResource"/>
<message-resources parameter="resources.Registration"/>
</struts-config>
如果没有第二个“Registration”资源,则不会抛出异常。 “label.username”仅存在于“DefaultResource”中。
非常感谢。
答案 0 :(得分:9)
使用此struts-config,第二个message resources元素使用与第一个相同的(默认)键,因此完全替换第一个。您必须为每个bundle分配一个不同的键,并使用bean:message标签中的bundle atttribute来指示您要使用的bundle:
<struts-config>
~~~snip~~~
<message-resources parameter="resources.DefaultResource"/>
<message-resources parameter="resources.Registration" key="registrationBundle"/>
</struts-config>
并在JSP中:
Message from the default bundle : <bean:message key="my.first.key"/>
Message from the registration bundle : <bean:message key="my.second.key" bundle="registrationBundle"/>
答案 1 :(得分:2)
我相信你需要提供关键属性。密钥应该在jsp中的标记中使用,以显示资源属性文件中的特定消息。看一下这个tutorial。
答案 2 :(得分:2)
您的问题中包含的文档摘要中就是答案。 如果你有多个捆绑包,
可以在您的应用程序中同时使用不同的包,'key'属性用于指定所需的包。
http://struts.apache.org/1.3.10/struts-core/dtddoc/struts-config_1_3.dtd.html#message-resources
在struts-config中包含一个键属性(带有唯一值)和参数属性。没有明确的密钥,资源。注册正在覆盖资源.DefaultResource
(为了测试这个假设,在struts-config中切换两个消息资源的顺序。然后,你的label.username将起作用,但来自另一个bundle的消息不会)