【问题标题】:Same ValueStack for 2 different struts apps2 个不同的 struts 应用程序的相同 ValueStack
【发布时间】:2012-05-04 21:04:57
【问题描述】:

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

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

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

我应该把 struts jar 带回战争吗?

谢谢

我使用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" />

【问题讨论】:

  • 我喜欢你的问题,因为它很奇怪。我看不出 struts2 对此有何过错。您能否创建两个新的最小 struts2 应用程序,每个应用一个 jsp,一个资源文件,一个消息并验证您是否可以重新创建此问题?
  • 嗨四元数,感谢您的关注。我已经做到了,不是 2 个,而是 3 个简单的应用程序:a.war、b.war、c.war。接下来发生的事情:a.war首先启动并正确显示了jsp中的文本,应用程序b显示了消息,但不是它自己的属性中的那个,而是a应用程序中的那个,而第3个应用程序没有显示任何消息,只是“system.title.c”,因为它找不到键名,现在我可以看到 struts 只加载了 1 个属性文件,即第一个加载的文件。

标签: struts2 jboss5.x libs valuestack


【解决方案1】:

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

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.

【讨论】:

  • 非常感谢你,我认为我想尝试 Jboss 分别加载静态变量。生病让你知道结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-10
  • 2016-02-29
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多