struts2全局结果未重定向到操作

struts2全局结果未重定向到操作,struts2,global,interceptor,Struts2,Global,Interceptor,我有一个自定义拦截器(TransferInterceptor),用于检查应用程序中的函数更改。当它更改时,拦截器返回一个后处理字符串(结果),其中包含我要重定向到的操作的全局结果名称。我在struts.xml文件的全局结果中定义了结果,但它们不会重定向到指定的操作。我有一个工作正常的“登录”全局结果,但它是通过以下JSP调用的: <s:a action="Login.action">Login</s:a> 任何帮助都将不胜感激 根据@Lukasz评论: 如果要重定向到操

我有一个自定义拦截器(TransferInterceptor),用于检查应用程序中的函数更改。当它更改时,拦截器返回一个后处理字符串(结果),其中包含我要重定向到的操作的全局结果名称。我在struts.xml文件的全局结果中定义了结果,但它们不会重定向到指定的操作。我有一个工作正常的“登录”全局结果,但它是通过以下JSP调用的:

<s:a action="Login.action">Login</s:a>

任何帮助都将不胜感激

根据@Lukasz评论:


如果要重定向到操作,请使用重定向操作结果类型,而不是重定向到静态资源的重定向


它仍然不起作用,因为ACTIONB和ACTIONA从未执行,因为它们经过相同的拦截器堆栈,而拦截器堆栈返回重定向操作结果&因此,它有点陷入了一个无限循环。

如果你想重定向到一个操作,请使用
redirectAction
结果类型,而不是
redirect
,后者用于重定向到静态资源这就是答案@LukaszLenart,你应该发布它:)我将type=“redirect”改为type=“redirectAction”我仍然有同样的问题。你确定你的拦截程序被调用了吗?是的。我看到了返回“RESULTB”字符串的位置,但是没有执行ACTIONB。
<package name="default" extends="struts-default" namespace="/">
    <interceptors>
        <interceptor name="AuthenticationInterceptor" class="com.purchasing.utils.AuthenticationInterceptor" />
        <interceptor name="TransferInterceptor" class="com.purchasing.utils.TransferInterceptor" />
        <interceptor-stack name="secureStack">
            <interceptor-ref name="TransferInterceptor" />
            <interceptor-ref name="AuthenticationInterceptor" />
            <interceptor-ref name="defaultStack" />
        </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="secureStack" />

    <global-results>
        <result name="Login">login.jsp</result>
        <result name="RESULTA" type="redirect">ACTIONA</result>
        <result name="RESULTB" type="redirect">ACTIONB</result>
    </global-results>

    <action name="Login" class="com.purchasing.actions.Login">
        <interceptor-ref name="defaultStack"></interceptor-ref>
        <result name="success">welcome.jsp</result>
        <result name="error">login.jsp</result>
        <result name="input">login.jsp</result>
    </action>

    <action name="ACTIONA" class="com.purchasing.actions.ACTIONA">
        <result name="success">ACTIONA.jsp</result>
        <result name="error">ACTIONA.jsp</result>
        <result name="input">ACTIONA.jsp</result>
    </action>   

    <action name="ACTIONB" class="com.purchasing.actions.ACTIONB">
        <result name="success">ACTIONB.jsp</result>
        <result name="error">ACTIONB.jsp</result>
        <result name="input">ACTIONB.jsp</result>
    </action>                

</package>
public String intercept(ActionInvocation ai) throws Exception
{
    String result = ai.invoke();

    session = ai.getInvocationContext().getSession();
    fl = (FunctionLine) session.get(Constants.FUNCTION_LINE);
    function = fl.getFl_function();
    last_function = (Integer) session.get(Constants.LAST_FUNCTION);

    if (function != last_function) {
       session.put(Constants.LAST_FUNCTION, new Integer(function));
       switch (function) {
              case 61: return "RESULTA";
              case 62: return "RESULTB";
       }
       return "error";
    }
    else {
       return result;
    }
 }