2016-11-24 34 views
0

我有一個重定向到本身的struts2鏈的結果,但因爲最終將評估爲false,然後遞歸將停止的條件它不創建一個無限循環。我必須使用鏈而不是redirectAction,因爲我需要一個POST請求,這是redirectAction無法做到的。Struts2的無限遞歸檢測

這是我得到

Could not execute action 
Infinite recursion detected: [/view/myAction!myMethod, /view/myAction, /view/myAction] - [unknown location] 
    at com.opensymphony.xwork2.ActionChainResult.execute(ActionChainResult.java:214) 

我已通過XWork的罐子,其中無限循環檢測所依據的除外。它會查看鏈歷史記錄,如果它找到操作名稱,則會引發異常。最大遞歸是硬編碼爲1

有沒有辦法來處理異常或手動增加允許遞歸的最大數量或重置鏈的歷史,同時鏈接?

+1

的行動*鏈*爲*本身*使用業務變量時鏈或斷裂檢測?這聽起來像是一個驚人的災難配方。重新考慮整個行動。不要鏈/重定向到自己,不要鏈,並且不要使用POST,請使用POST/REDIRECT/GET。如果您需要操作中的通用邏輯,請提取該邏輯並將其放入業務組件中,然後從所需的所有操作中調用它。 –

回答

1

我找到了一種方法來操縱鏈的歷史,從一個攔截器

final ActionContext context = invocation.getInvocationContext(); 
    LinkedList<String> chainHistory = (LinkedList<String>) context.get("CHAIN_HISTORY"); 
    // context.put("CHAIN_HISTORY", null);