1

XML リクエストを前処理するインターセプターを作成したいと考えています。このインターセプターでは、XML を解析し、処理された情報を ValueStack に配置して、アクション内のインスタンスにマップできるようにします。しかし、私は非常に多くの方法を試しましたが、どれもうまくいきません。誰でも私を助けてアドバイスをくれますか?ありがとう!

Interceptor

で //ValueStack
ActionContext を取得 ctx = invocation.getInvocationContext();
マップ ctxMap = ctx.getValueStack().getContext();

//次のことを試しましたが、次のいずれも動作しません
ctxMap.get("com.opensymphony.xwork2.ActionContext.parameters")).put("data1", "1");
ctxMap.get("パラメータ")).put("データ1", "1");
ctxMap.get("リクエスト")).put("データ1", "1");
ctx.getParameters().put("data1",new String[]{"1"});

//Sample Action Class
public class TestAction extends ActionSupport {
     private String data1;
     public String execute() {  
         System.out.println("data1 value: " + data1);
         return SUCCESS;
     }
//Get Setter is omitted here
}
4

1 に答える 1

3

処理された値をインターセプター内の値スタックに追加する必要があります

ActionContext.getContext().getValueStack().setValue("data1",yourdata);

インターセプターの呼び出し時にアクション インスタンスが作成されている場合は、値を追加する必要があります。動作しない場合は、インターセプター スタックの順序に問題があるはずです。インターセプターをスタックの一番下に配置して、残りの処理が終了し、アクション プロパティへのバインディングが期待どおりに機能していることを保証できるようにします。

于 2012-05-13T14:55:53.817 に答える