Struts2 两个不同struts应用程序的相同ValueStack

Struts2 两个不同struts应用程序的相同ValueStack,struts2,jboss5.x,libs,valuestack,Struts2,Jboss5.x,Libs,Valuestack,我在JBossAS(5.1.0-GA)中运行SRUTS2(2.1.8.1)应用程序。我将a.war和b.war放在同一个/server/default/deploy路径中,并将struts2 libs放在/server/default/lib路径中 在应用程序或服务器中没有错误消息,但是当我出于某种原因键入b.jsp页面时,应用程序a的消息资源中的消息将被删除 所以,我的问题是: 将struts JAR放在服务器的/lib中只会创建一个值堆栈实例,所有应用程序都必须使用相同的实例?如果是这样的话

我在JBossAS(5.1.0-GA)中运行SRUTS2(2.1.8.1)应用程序。我将a.war和b.war放在同一个/server/default/deploy路径中,并将struts2 libs放在/server/default/lib路径中

在应用程序或服务器中没有错误消息,但是当我出于某种原因键入b.jsp页面时,应用程序a的消息资源中的消息将被删除

所以,我的问题是: 将struts JAR放在服务器的/lib中只会创建一个值堆栈实例,所有应用程序都必须使用相同的实例?如果是这样的话,我该怎么做才能让每个应用程序都有不同的实例,但把jar保存在服务器paht中呢

我应该把struts罐子带回战场吗

谢谢

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

<s:property value="%{getText('system.title')}"/>
在struts.xml中,我有

<constant name="struts.custom.i18n.resources" value="a-message-resources" />
<constant name="struts.custom.i18n.resources" value="b-message-resources" />
在struts.xml中,我有

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

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

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

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


另外,您的JBoss实例加载此类的方式似乎导致了静态变量的共享。您可以将JBoss配置为分别为每个应用加载此类

我喜欢你的问题,因为它很奇怪。我看不出struts2在这方面有什么过错。您能否创建两个新的最小struts2应用程序,每个应用程序有一个jsp,每个应用程序有一个资源文件和一条消息,并验证您是否可以重新创建此问题?您好,四元数,感谢您的关注。我已经做到了,不是用2个,而是3个简单的应用:a.war,b.war,c.war。接下来发生的事情是:a.war首先启动并在jsp中正确显示文本,应用程序b显示消息,但不是其自身属性中的消息,而是a应用程序中的消息,而第三个应用程序没有显示任何消息,只是“system.title.c”,因为它找不到密钥名称,现在我可以看到struts只加载了1个属性文件,这是第一个加载的。非常感谢你,我想我会尝试Jboss单独加载静态变量。我会让你知道结果的。