如何在Struts中包含多个消息资源?

时间:2011-01-21 16:40:39

标签: java struts-1

我正在使用(学习......)Struts 1.3来构建MVC Web应用程序。为清楚起见,我想包含多个<message-resources>元素 - 将消息分离为应用程序特定模块的文件。

官方Apache documentation州:

  

您可以为您的网络应用定义一个或多个<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”中。

非常感谢。

3 个答案:

答案 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的消息不会)