相同的ValueStack适用于2个不同的struts应用程序

时间:2012-05-04 21:04:57

标签: struts2 jboss5.x libs valuestack

我在jboss AS(5.1.0-GA)中运行我的sruts 2(2.1.8.1)应用程序。我将a.war和b.war放在相同的/ server / default / deploy路径中,并将struts 2 lib放在/ server / default / lib路径中。

应用程序或服务器中没有错误消息,但是当我因某种原因输入http://localhost:8080/b/进入b.jsp页面时,应用程序的消息资源中的消息a。

所以,我的问题是: 将struts jar放在服务器的/ lib中只创建一个值堆栈的实例,所有应用程序必须使用相同的实例?如果是这样,我可以做些什么来为每个应用程序提供不同的实例,但是将jar保留在服务器中?

我应该把struts罐子带回战争吗?

由于

我使用struts标签获取系统标题

<s:property value="%{getText('system.title')}"/>

这是我对a.war的配置:

/WEB-INF/classes/a-message-resources.properties

system.title=Namefor system A
我在struts.xml中的

<constant name="struts.custom.i18n.resources" value="a-message-resources" />

这是b.war的配置

/WEB-INF/classes/b-message-resources.properties

system.title=Namefor system B
我在struts.xml中的

<constant name="struts.custom.i18n.resources" value="b-message-resources" />

1 个答案:

答案 0 :(得分:4)

我想我可能知道这里发生了什么。

struts.custom.i18n.resources值已标记化,每个标记都会添加到LocalizedTextUtil.DEFAULT_RESOURCE_BUNDLES。这是一个静态的最终字符串列表。在将项添加到列表(例如system.title)之前,会在同一令牌上调用list.remove(),删除system.title的所有先前条目。

因为这个字段是静态的,并且因为它只允许每个消息有一个条目,所以首先加载你的system.title属性然后被下一个被覆盖。

同样,您的JBoss实例似乎正在以导致静态变量共享的方式加载此类。您可以将JBoss配置为为每个应用程序单独加载此类。 This might be a good place start