如何在struts.xml中重新映射Action实现类?

时间:2014-09-02 22:05:37

标签: java struts2

如何从struts2.xml中的struts.xml中注入一个动作的实现类?

假设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. Team-A开发并维护struts.xml。我的团队(团队B)使用团队A的代码库,并将其部署在一个单独的数据中心。
  2. Team-B需要将一些操作映射到不同的类。但是我们不能在struts.xml中直接修改它,因为它会改变Team-A服务的行为。
  3. 所以我想要的是有一个单独的文件(struts2.xml),其类映射可以覆盖struts.xml中的那些。操作包名称没有变化。 JSP代码没有变化。此struts2.xml将仅部署在team-B的数据中心中。

1 个答案:

答案 0 :(得分:0)

这样做的简单方法是使用多个(单独的)struts配置文件并将它们导入主struts.xml文件。

在您的情况下,将struts.xml重命名为struts1.xml。在主struts.xml

中加入这两个文件
<include file="struts1.xml"></include>
<include file="struts2.xml"></include>

我不确定这些文件的导入顺序,因此无法评论第二个文件中的映射是否会影响第一个映射,反之亦然。请自行尝试确定必须首先包含哪个文件。

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

请参阅this链接以获取完整示例。