jfinal / jfinal

JAVA WEB + ORM Framework
https://jfinal.com
Apache License 2.0
3.24k stars 1.32k forks source link

JFinal 3.0路由的问题 #115

Closed zhukuanxin closed 7 years ago

zhukuanxin commented 7 years ago

定义两个路由

@Override
public void configRoute(Routes me) {
    me.add(new ViewRoutes());
    me.add(new DataRoutes());
}

分别给两个路由设置baseViewPath:view和data

import x.y.jfinal.web.controller.view.TestController;
public class ViewRoutes extends BaseRoutes {

    private static final String BASE_VIEW_PATH = "/view";

    @Override
    public void config() {
    setBaseViewPath(BASE_VIEW_PATH);
    add("/controllerKey",TestController.class);
    }
}

import x.y.jfinal.web.controller.data.TestController;
public class DataRoutes extends BaseRoutes {

    private static final String BASE_VIEW_PATH = "/data";

    @Override
    public void config() {
    setBaseViewPath(BASE_VIEW_PATH);
    add("/controllerKey", TestController.class);
    }

}

但是这两个路由里面都定义了一个相同的controllerKey,会提示“controllerKey already exists”

zhukuanxin commented 7 years ago

詹大,关于这个问题,请给我些指导。

jfinal commented 7 years ago

不是这么来理解的。 baseViewPath 指在调用 Controller.render(String view) 这个方法时,如果 view 这个变量不以 "/" 打头,那么将会用上 baseViewPath + viewPath + view 作为最终的 view 值,这个规则在本质上与 controllerKey 没有关系,controllerKey 保表达在 url 之中, 而 baseViewPath、viewPath、view 这三者都是表达在 render(...) 时的模板文件之中

zhukuanxin commented 7 years ago

这就意味着,我想定义/view/controllerKey和/data/controllerKey时,只能写全路径。有没有其他的方法,可以区分,而不用每个controllerKey都得写全。

jfinal commented 7 years ago

controllerKey 目前只支持写全路径,一个 controllerKey 唯一对应一个 Controller