public abstract class Routes extends Object
| 限定符和类型 | 类和说明 |
|---|---|
static class |
Routes.Route |
| 构造器和说明 |
|---|
Routes() |
| 限定符和类型 | 方法和说明 |
|---|---|
Routes |
add(Routes routes)
Add Routes
|
Routes |
add(String controllerPath,
Class<? extends Controller> controllerClass)
Add route.
|
Routes |
add(String controllerPath,
Class<? extends Controller> controllerClass,
String viewPath)
Add route
|
Routes |
addInterceptor(Interceptor interceptor)
Add interceptor for controller in this Routes
|
void |
clear() |
abstract void |
config()
Implement this method to add route, add interceptor and set baseViewPath
|
String |
getBaseViewPath() |
Interceptor[] |
getInterceptors() |
boolean |
getMappingSuperClass() |
List<Routes.Route> |
getRouteItemList() |
static List<Routes> |
getRoutesList() |
Routes |
scan(String basePackage)
扫描路由
|
Routes |
scan(String basePackage,
Predicate<String> skip)
扫描路由
1:路由不拆分例子:
routes.setBaseViewPath("/_view");
routes.scan("com.jfinal.club.");
2:前后台路由拆分例子(例子来源于俱乐部项目源码 jfinal-club):
// 扫描后台路由
me.add(new Routes() {
public void config() {
// 添加后台管理拦截器,将拦截在此方法中注册的所有 Controller
this.addInterceptor(new AdminAuthInterceptor());
this.addInterceptor(new PjaxInterceptor());
this.setBaseViewPath("/_view/_admin");
// 如果被扫描的包在 jar 文件之中,需要添加如下配置:
// undertow.hotSwapClassPrefix = com.jfinal.club.
|
Routes |
setBaseViewPath(String baseViewPath)
Set base view path for controller in this routes
|
void |
setClearAfterMapping(boolean clearAfterMapping)
配置是否在路由映射完成之后清除内部数据,以回收内存,默认值为 false.
|
Routes |
setMappingSuperClass(boolean mappingSuperClass)
设置是否映射超类中的方法为路由,默认值为 false
以免 BaseController extends Controller 用法中的 BaseController 中的方法被映射成 action
|
public abstract void config()
public Routes setMappingSuperClass(boolean mappingSuperClass)
public boolean getMappingSuperClass()
public Routes scan(String basePackage, Predicate<String> skip)
1:路由不拆分例子:
routes.setBaseViewPath("/_view");
routes.scan("com.jfinal.club.");
2:前后台路由拆分例子(例子来源于俱乐部项目源码 jfinal-club):
// 扫描后台路由
me.add(new Routes() {
public void config() {
// 添加后台管理拦截器,将拦截在此方法中注册的所有 Controller
this.addInterceptor(new AdminAuthInterceptor());
this.addInterceptor(new PjaxInterceptor());
this.setBaseViewPath("/_view/_admin");
// 如果被扫描的包在 jar 文件之中,需要添加如下配置:
// undertow.hotSwapClassPrefix = com.jfinal.club._admin.
this.scan("com.jfinal.club._admin.");
}
});
// 扫描前台路由
me.add(new Routes() {
public void config() {
this.setBaseViewPath("/_view");
// 如果被扫描的包在 jar 文件之中,需要添加如下配置:
// undertow.hotSwapClassPrefix = com.jfinal.club.
this.scan("com.jfinal.club.", className -> {
// className 为当前正扫描的类名,返回 true 时表示跳过当前类不扫描
return className.startsWith("com.jfinal.club._admin.");
});
}
});
注意:
1:拆分路由是为了可以独立配置 setBaseViewPath(...)、addInterceptor(...)
2:scan(...) 方法要添加 skip 参数,跳过后台路由,否则后台路由会被扫描到,
造成 baseViewPath 以及 routes 级别的拦截器配置错误
3: 由于 scan(...) 内部避免了重复扫描同一个类,所以需要将扫描前台路由代码
放在扫描后台路由之前才能验证没有 skip 参数造成的后果
basePackage - 进行扫描的基础 package,仅扫描该包及其子包下面的路由skip - 跳过不需要被扫描的类public Routes add(String controllerPath, Class<? extends Controller> controllerClass, String viewPath)
controllerPath - path of controllercontrollerClass - Controller ClassviewPath - View path for this Controllerpublic Routes add(String controllerPath, Class<? extends Controller> controllerClass)
controllerPath - path of controllercontrollerClass - Controller Classpublic Routes addInterceptor(Interceptor interceptor)
public Routes setBaseViewPath(String baseViewPath)
public String getBaseViewPath()
public List<Routes.Route> getRouteItemList()
public Interceptor[] getInterceptors()
public void setClearAfterMapping(boolean clearAfterMapping)
public void clear()
Copyright © 2022. All rights reserved.