【发布时间】:2013-09-24 22:56:30
【问题描述】:
我有一个自定义拦截器 (TransferInterceptor),用于检查我的应用程序中的函数更改。当它发生变化时,拦截器会返回一个后处理字符串(结果),其中包含我要重定向到的操作的全局结果名称。我在我的 struts.xml 文件的全局结果中定义了结果,但它们不会重定向到指定的操作。我有一个运行良好的“登录”全局结果,但它是从 JSP 调用的:
<s:a action="Login.action">Login</s:a>
struts.xml 文件:
<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>
TransferInterceptor:
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;
}
}
任何帮助将不胜感激!
【问题讨论】:
-
如果你想重定向到一个动作使用
redirectAction结果类型而不是redirect用于重定向到静态资源 -
这就是@LukaszLenart 的答案,你应该发布它:)
-
我把 type="redirect" 改成 type="redirectAction" 还是一样的问题。
-
你确定你的拦截器被调用了吗?
-
是的。我看到了“RESULTB”字符串的返回位置,但是没有执行 ACTIONB。
标签: struts2 global interceptor