2016-09-28 18 views
-1

struts.xmlのアクションマッピングを新しいエントリで変更(または上書き)するアプリケーションがあります。 ここで詳細な説明はシナリオです。struts.xmlのアクションクラスエントリを動的に変更する方法はありますか?

私のアプリケーションでは、私は登録、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に基づいてアクションをトリガー(またはアクションのクラス名を変更)したいと思います。それを行う方法はありますか?

+0

https://struts.apache.org/docs/wildcard-mappings.html –

+0

ワイルドカードが動作しません、'アクションNAME'は同じである必要があります。一方、 'actionName'に基づいたワイルドカードの動作 – piechuckerr

+0

Struts2のアクションクラスは隠されており、アクション名が公開されています。これが必要な場合は、多くのXYの問題が発生します。 –

答えて

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> 

Actionクラス:

を私は `アクションclass`を変更したいので
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" 

      } 

} 
関連する問題