首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
路由设置拦截器且对当前路由生效吗?
天晴
2019-06-14 17:44
测试了一下,add进去的下级路由是不生效的。
项目:
JFinal
评论区
JFinal
2019-06-14 17:57
routes 级别的拦截器只在本 Routes 中有效,不能往下传递到子 Routes 中
回复
天晴
2019-06-14 18:01
感谢波总,已改为 add(new ModuleRoutes().addInterceptor(new SetMainMenusInterceptor()));
回复
杜福忠
2019-06-14 18:11
想要实现这样的效果,可以自己建一个 MyRoutes, 重写一下:
public Routes add(Routes routes) {
for(Interceptor x : getInterceptors()) routes.addInterceptor(x);
super.add(routes);
return this;
}
自己的业务 Routes 都去继承 MyRoutes 就可以了吧
回复
JFinal
2019-06-14 21:30
@天晴
你不写出来我还记了有这么个方法,在 new XxxRoutes() 的同时可以直接 addInterceptor(...),这种用法最好
回复
天晴
2019-06-15 22:29
@杜福忠
感谢大佬
回复
天晴
2019-06-17 11:20
@JFinal
波总,下一个版本是否考虑添加此功能?
Routes的add(Routes routes)方法里添加:
for(Interceptor x : getInterceptors()) {
routes.addInterceptor(x);
}
实现拦截器下传?
回复
JFinal
2019-06-17 11:34
@天晴
多数情况下,不建议使用多层拦截器,而是 AdminRoutes、FrontRoutes、WeixinRoutes ...... 这样扁平化来使用
少数确实要使用多层 routes 的,可以用你的办法:
add(new ModuleRoutes().addInterceptor(new SetMainMenusInterceptor()));
加你建议的这个功能也不难,但这个需求貌似不强烈,很少有人提起
加了的话,最大的问题在于,如果有人不希望在下层 routes 中使用上层的拦截器, 还要想办法去掉,而去掉的话就十分麻烦了
回复
JFinal
2019-06-17 11:37
@天晴
总之:
1: 需求不太强烈
2: 要满足这个需求,可以通过你的办法多一行代码解决,很方便,也很好理解,没有学习成本
3:如果要加上这个功能,如果用户要在下层的子 Routes 中去除上层的拦截器相当麻烦
设计就是无处不在的权衡取舍,没有完美,只有追求最佳平衡
回复
天晴
2019-06-17 11:38
了解
回复
发送
我要反馈
热门反馈
扫码入社