关于jfinal的inteceptor调用的问题。
@JFinal 你好,想跟你请教个问题:
我有在configInterceptor里面加了两个interceptor,就简单的打印一些调用信息。
@Override public void configInterceptor(Interceptors me) { // TODO Auto-generated method stub me.add(new Test1Interceptor()); me.add(new Test2Interceptor()); }
当有请求过来的时候,
ActionHandler里面的handle方法会创建相应的ActionInvocation
Controller controller = action.getControllerClass().newInstance(); controller.init(request, response, urlPara[0]); if (devMode) { boolean isMultipartRequest = ActionReporter.reportCommonRequest(controller, action); new ActionInvocation(action, controller).invoke(); if (isMultipartRequest) ActionReporter.reportMultipartRequest(controller, action); } else { new ActionInvocation(action, controller).invoke(); }
创建完ActionInvocation之后,调用相当的invoke方法。但是在invoke方法里面
public void invoke() { if (index < inters.length) inters[index++].intercept(this); else if (index++ == inters.length) // index++ ensure invoke action only one time // try {action.getMethod().invoke(controller, NULL_ARGS);} catch (Exception e) {throw new RuntimeException(e);} try { action.getMethod().invoke(controller, NULL_ARGS); } catch (InvocationTargetException e) { Throwable cause = e.getTargetException(); if (cause instanceof RuntimeException) throw (RuntimeException)cause; throw new RuntimeException(e); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } }
这里面,由于inters.length的值为2(上面加了两个interceptor),导致else if里面的
action.getMethod().invoke(controller, NULL_ARGS);
执行不了。我调试跟进去也确实是这样。
请问是我的理解或是写法有误吗?? 希望能回复指点一下,谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论