struts2.0裡寫攔截器的時候,如果被攔截的action無異常的執行完畢,并傳回了一個傳回值,而攔截器試圖跳轉到另一個傳回值上去時,不能簡單的用攔截器的return xxx來實作。這樣不起作用。
原因是使用 invocation.invoke();的時候,不僅執行了action内部的邏輯,而且會根據action傳回的結果去組裝result。是以,在攔截器繼續執行後續邏輯時,傳回結果已經被确定了。這樣一來,即使攔截器傳回了其它的resultString,也改變不了result了。
正确的實作方法在尋找中。
CH找到了解決的方法:
ActionInvocationWrapper argWrapper = new ActionInvocationWrapper(arg0);
// 單獨執行Action
result = argWrapper.executeAction();
// 單獨執行Result
argWrapper.executeResult();
這樣就把action的邏輯和result的邏輯拆開。在這兩個邏輯中間就可以插入攔截器的處理邏輯了。
本文轉自 斯然在天邊 51CTO部落格,原文連結:http://blog.51cto.com/winters1224/797910,如需轉載請自行聯系原作者