如何动态更改struts.xml中的操作类条目?

时间:2016-09-28 11:22:36

标签: struts2

我有一个应用程序,我想用新条目修改(或覆盖)struts.xml中的动作映射。 有关详细说明,请参见方案。

在我的应用程序中,我有不同的阶段,如registration,change_data,我使用context Param管理这些。

Web.xml中

 <context-param>
    <description>Current stage of the application</description>
    <param-name>stage</param-name>
    <param-value>registration</param-value>
 </context-param>

我有一个行动,即支付网关的重定向请求,即支付网关正在向用户发送此操作。

struts2.xml(演示条目)

<!-- for registration -->
<action name="paymentResponse" class="abc.xyz.PaymentResponse">
    <result name="input" type="tiles">paymentForReg.tiles</result>
    <result name="success" type="tiles">home.tiles</result>
</action> 

<!-- for change data -->
<action name="paymentResponse" class="abc.xyz.PaymentResponseForChangeData">
    <result name="input" type="tiles">paymentForChangeData.tiles</result>
    <result name="success" type="tiles">home.tiles</result>
</action> 

因此,当应用程序的阶段发生变化时,我正在做的是web.xml中的更改阶段,并评论来自struts.xml

的操作中的一个条目

总而言之,我有多个具有相同名称的操作,我想在context param的基础上触发(或更改操作类名称)操作。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

如果我没有错,我认为你必须使用如下的动态动作,那么你可以在xml中使用相同的动作和相同的条目

struts.xml中:

<action name="paymentResponse" class="abc.xyz.RedirectPaymentResponse" method="updateCriteria">
        <result name="response" type="tiles">paymentForChangeData.tiles</result>
        <result name="responsechanged" type="tiles">paymentForReg.tiles</result>
        <result name="success" type="tiles">home.tiles</result>
</action>

动作类:

public class RedirectPaymentResponse extends AbstractAppAction {


        public String execute () throws Exception
        {
            // some code
            return "success";
        }

        public String updateCriteria(){

            //logic here

            if(PaymentResponse){
            // code here
            return "response";

            }

            if(PaymentResponseChanged){
            // code here
            return "responsechanged"

            }

}