2.3 configRoute(Routes me)

2022-07-11 10:07 更新

此方法用來配置 JFinal 訪問路由,如下代碼配置了將”/hello”映射到 HelloController 這個(gè)控 制器 , 通 過 以 下 的 配 置 , http://localhost/hello 將 訪 問 HelloController.index() 方法, 而 http://localhost/hello/methodName 將訪問到 HelloController.methodName()方法。


public void configRoute(Routes me) 

{ me.add("/hello", 

HelloController.class);


Routes 類主要有如下兩個(gè)方法:


public Routes add(String controllerKey, Class<? extends Controller>

controllerClass, String viewPath)

public Routes add(String controllerKey, Class<? extends Controller>

controllerClass)


第一個(gè)參數(shù) controllerKey 是指訪問某個(gè) Controller 所需要的一個(gè)字符串,該字符串唯一對(duì) 應(yīng)一個(gè) Controller,controllerKey 僅能定位到 Controller。第二個(gè)參數(shù) controllerClass 是該 controllerKey 所對(duì)應(yīng)到的 Controller。第三個(gè)參數(shù) viewPath 是指該 Controller 返回的視圖的相對(duì) 路徑(該參數(shù)具體細(xì)節(jié)將在 Controller 相關(guān)章節(jié)中給出)。當(dāng) viewPath 未指定時(shí)默認(rèn)值為 controllerKey。

JFinal 路由規(guī)則如下表:

url  組成

訪問目標(biāo)

controllerKey

YourController.index()

controllerKey/method

YourController.method()

controllerKey/method/v0-v1

YourController.method(),所帶 url 參數(shù)值為:v0-v1

controllerKey/v0-v1

YourController.index(),所帶 url 參數(shù)值為:v0-v1

從表中可以看出,JFinal 訪問一個(gè)確切的Action(Action 定義見 3.2 節(jié))需要使用 controllerKey與 method 來精確定位,當(dāng)method 省略時(shí)默認(rèn)值為 index。urlPara 是為了能在 url 中攜帶參數(shù) 值,urlPara 可以在一次請(qǐng)求中同時(shí)攜帶多個(gè)值,JFinal 默認(rèn)使用減號(hào)“-”來分隔多個(gè)值(可 通過constants. setUrlParaSeparator(String)設(shè)置分隔符),在 Controller  中可以通過 getPara(intindex)分別取出這些值。controllerKey、method、urlPara 這三部分必須使用正斜杠“/”分隔。 注意,controllerKey 自身也可以包含正斜杠“/”,如“/admin/article”,這樣實(shí)質(zhì)上實(shí)現(xiàn)了struts2 的 namespace 功能。


JFinal 在以上路由規(guī)則之外還提供了 ActionKey 注解,可以打破原有規(guī)則,以下是代碼示 例:

public class UserController extends Controller {

@ActionKey("/login")

public void login() 

{ render("login.html");

}


假定 UserController 的 controllerKey 值為“/user”,在使用了@ActionKey(“/login”)注解以 后,actionKey 由原來的“/user/login”變?yōu)榱恕?login”。該注解還可以讓 actionKey 中使用減號(hào)或 數(shù)字等字符,如“/user/123-456”。


如果 JFinal 默認(rèn)路由規(guī)則不能滿足需求,開發(fā)者還可以根據(jù)需要使用 Handler 定制更加個(gè) 性化的路由,大體思路就是在 Handler 中改變第一個(gè)參數(shù) String target 的值。

JFinal 路由還可以進(jìn)行拆分配置,這對(duì)大規(guī)模團(tuán)隊(duì)開發(fā)特別有用,以下是代碼示例:

public class FrontRoutes extends Routes {

public void config(){

add("/",IndexController.class);

add("/blog", BlogController.class);

}

}


public class AdminRoutesextends Routes{

public void config(){

add("/admin",AdminController.class);

add("/admin/user", UserController.class);

}

}


public class MyJFinalConfigextends JFinalConfig{

publicvoid configRoute(Routesme) 

{ me.add(new FrontRoutes());  // 前端路由 

me.add(new AdminRoutes()); // 后端路由

}

public void configConstant(Constantsme) {}

public void configPlugin(Pluginsme) {}

public void configInterceptor(Interceptorsme) {}

public void configHandler(Handlersme) {}

}

如上三段代碼,F(xiàn)rontRoutes 類中配置了系統(tǒng)前端路由,AdminRoutes 配置了系統(tǒng)后端路由, MyJFinalConfig.configRoute(…)方法將拆分后的這兩個(gè)路由合并起來。使用這種拆分配置不僅 可以讓 MyJFinalConfig 文件更簡(jiǎn)潔, 而且有利于大規(guī)模團(tuán)隊(duì)開發(fā), 避免多人同時(shí)修改 MyJFinalConfig 時(shí)的版本沖突。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)