猿问

拦截器:actionInvocation.invoke() 不返回,但也跳转到视图

我用struts2搭建了一个登录平台。我使用一个拦截器扩展 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,所以它不应该跳转到视图。但是,确实如此。


慕桂英3389331
浏览 177回答 1
1回答

紫衣仙女

请参阅“编写拦截器”文档。重要的部分:[...]invoke将在调用结果后返回(例如,在您的 JSP 被渲染后),使其非常适合诸如 open-session-in-view 模式之类的事情。如果你想在结果被调用之前做一些事情,你应该实现一个 PreResultListener。即,如果您调用invoke,拦截器和操作将正常执行。短路正常处理不要调用,invoke而是返回适合您目的的结果,例如登录页面的全局结果。
随时随地看视频慕课网APP

相关分类

Java
我要回答