2014-09-02 26 views
3

如何从struts2.xml在struts.xml中注入动作的实现类?如何在struts.xml中重新映射Action实现类?

设在struts.xml如下所示:

<struts> 
    <action name="EnginesList" class="example.EnginesListAction"> 
     <result name="*">viewengines.jsp</result> 
    </action> 
</struts> 

然后我想实现:在当struts2.xml存在(或不为空),然后在struts2.xml类的映射覆盖那些struts.xml中。所以如果我有以下定义,那么在运行时EnginesList被映射到example.EnginesListAction2而不是example.EnginesListAction。

// struts.xml: 
<struts>  
    <action name="EnginesList" class="example.EnginesListAction"> 
     <result name="*">viewengines.jsp</result> 
    </action> 
    <include file="struts2.xml" /> 
</struts> 

// struts2.xml 
<struts>  
    <action name="EnginesList" class="example.EnginesListAction2"> 
     <result name="*">viewengines.jsp</result> 
    </action> 
</struts> 

由于名称冲突,这似乎不起作用。那么实现我最终目标的最佳方式是什么?


背景加入

  1. 队-A开发和维护的struts.xml。我的团队(团队B)使用团队A的代码库并将其部署到单独的数据中心。
  2. Team-B需要将一些动作映射到不同的类。但是我们不能在struts.xml中直接修改它,因为它会改变Team-A服务的行为。
  3. 所以我想要的是有一个单独的文件(struts2.xml),它的类映射可以覆盖struts.xml中的文件。行动包名称没有变化。 JSP代码没有变化。这个struts2.xml将只被部署在B队的数据中心。
+2

你的最终目标*是什么?你为什么需要这个? – 2014-09-03 08:39:17

+0

@AleksandrM struts.xml由团队A维护,我们的团队(团队B)不允许修改struts.xml中的类映射,所以我们必须从单独的文件中注入类映射。如果这个注入有效,那么team-A只在加载了struts.xml的情况下启动它们的服务器,而team-B在加载struts.xml和struts2.xml的同时启动它们的服务器。 – zzhang 2014-09-03 14:28:07

+0

@zzhang编辑一个问题,您可以在编辑:**标记下添加详细信息,而不是从中删除重要内容,试图以这种方式修改问题。 – 2014-09-03 16:03:56

回答

0

你可以做到这一点的简单方法是使用多个(单独的)struts配置文件并将它们导入到主文件struts.xml中。

在你的情况下,将struts.xml重命名为struts1.xml。包括这两个文件在主struts.xml

<include file="struts1.xml"></include> 
<include file="struts2.xml"></include> 

我不知道这些文件的进口秩序,所以不能在2号文件映射是否将阴影第一或反之亦然映射评论。尝试自己决定首先包含哪个文件。

有关包含配置的更多信息,请参阅this

请参阅this链接的完整示例。