configRoute(給我路由)


此方法用來配置JFinal 存取路由,如下程式碼配置了將」/hello」對應到HelloController 這個控制器, 透過以下的配置, http://localhost/hello 將存取HelloController.index()方法,而http://localhost/hello/methodName 將存取到HelloController.methodName()方法。

public void configRoute(Routes me) 
{ me.add("/hello", 
HelloController.class);

#Routes 類別主要有如下兩個方法:


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


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

controllerClass)


第一個參數controllerKey 是指存取某個Controller 所需的一個字串,該字串唯一對應一個Controller,controllerKey 僅能定位到Controller。第二個參數 controllerClass 是這個 controllerKey 所對應到的 Controller。第三個參數 viewPath 是指該 Controller 傳回的視圖的相對 路徑(該參數具體細節將在 Controller 相關章節中給出)。當 viewPath 未指定時預設值為 controllerKey。

JFinal 路由規則如下表:


QQ截图20170206095411.png

#從表中可以看出,JFinal 存取一個確切的Action(Action 定義見3.2 節)需要使用controllerKey與method 來精確定位,當method 省略時預設值為index。 urlPara 是為了能在url 中攜帶參數值,urlPara 可以在一次請求中同時攜帶多個值,JFinal 預設使用減號「-」來分隔多個值(可透過constants. setUrlParaSeparator(String)設定分隔符號),在Controller  中可以透過getPara(intindex)分別取出這些值。 controllerKey、method、urlPara 這三個部分必須使用正斜線「/」分隔。 注意,controllerKey 本身也可以包含正斜線“/”,如“/admin/article”,這樣實質上實現了struts2 的 namespace 功能。


JFinal 在上述路由規則之外還提供了ActionKey 註解,可以打破原有規則,以下是程式碼範例:

public class UserController extends Controller {
@ActionKey("/login")
public void login() 
#{ render("login.html");
#}
###{ render("login.html");####}########}###########################' ##


假定UserController 的controllerKey 值為“/user”,在使用了@ActionKey(“/login”)註解以後,actionKey 由原來的“/user/login”變為了“ /login」。此註解還可以讓 actionKey 中使用減號或 數字等字符,如“/user/123-456”。


如果JFinal 預設路由規則不能滿足需求,開發者還可以根據需要使用Handler 定制更加個性化的路由,大體思路就是在Handler 中改變第一個參數String target 的值。

JFinal 路由也可以進行分割配置,這對大尺度團隊開發特別有用,以下是程式碼範例:

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) {}### #########}#########################如上三段程式碼,FrontRoutes 類別中配置了系統前端路由,AdminRoutes 配置了系統後端路由, MyJFinalConfig.configRoute(…)方法將拆分後的這兩個路由合併起來。使用這種分割配置不僅 讓 MyJFinalConfig 檔案更簡潔, 而且有利於大規模團隊開發, 避免多人同時修改 MyJFinalConfig 時的版本衝突。 ##########