2016-11-24 74 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);