拦截器:actionInvocation.invoke()没有返回,但它也跳到了视图

时间:2019-01-12 17:14:04

标签: java struts2 struts2-interceptors

我使用struts2构建登录平台。我使用一个Interceptor扩展MethodFilterInterceptor。在方法doIntercept中,我使用“ actionInvocation.invoke()”代替“ return actionInvocation.invoke()”。但它也可以运行。

struts-2.5.18

public class loginInterceptor extends MethodFilterInterceptor {
    @Override
    protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
        if (ServletActionContext.getRequest().getSession().getAttribute("user") != null){
            actionInvocation.invoke();
        }
        return null;
    }
}

我认为因为该方法返回null,所以不应跳转到该视图。但是,确实如此。

1 个答案:

答案 0 :(得分:0)

请参阅"Writing Interceptors" docs

重要的部分:

  

[...] invoke将在调用结果后 (例如,呈现JSP之后)返回,使其非常适合诸如open-session-in视图模式。如果要在调用结果之前做一些事情,则应实现PreResultListener。

即,如果您调用invoke,则拦截器和操作将照常执行。

要短路正常处理,请调用invoke,而是返回适合您目的的结果,例如登录页面的全局结果。