2012-05-06 37 views
1

我想使攔截器預處理XML請求。在此攔截器中,它解析XML並將處理後的信息放入ValueStack中,以便它可映射到操作中的實例。但是,我嘗試了很多方法,但都沒有工作。任何人都可以幫助我並給我建議嗎?謝謝!(Struts2)如何將新參數添加到攔截器的Action實例中?

在攔截器

//獲取值棧
ActionContext中CTX = invocation.getInvocationContext();
Map ctxMap = ctx.getValueStack()。getContext();

//曾嘗試以下,但沒有下面的是工作
ctxMap.get( 「com.opensymphony.xwork2.ActionContext.parameters」))把( 「數據1」, 「1」)。
ctxMap.get(「parameters」))。put(「data1」,「1」);
ctxMap.get(「request」))。put(「data1」,「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 
} 
+0

你在哪裏放置攔截器會有所作爲,你還可以提供你構建的攔截器棧,這樣我們就可以確保你將攔截器放在正確的位置。 – Quaternion

回答

2

您應該添加所處理的值轉換成值堆內部攔截

ActionContext.getContext()getValueStack()的setValue( 「DATA1」,yourdata)。;

如果您的動作實例已在攔截器調用時創建,則應添加該值。如果它沒有工作,攔截器堆棧的順序應該有問題。試着將你的攔截器放在堆棧的底部,這樣我們可以保證剩下的處理結束,並且綁定到你的動作屬性按照需要工作。