JFinal路由配置使用那年的小秘密

     在接受一个新的框架之前我们以往就是从官网上下载demo到本地部署运行查看手册,这么做有两种好处:1、验证demo本身是否有异常;2、实现的效果是否达到自己想要的;然后再根据官网提供的手册查阅,这样才能更深刻的学习和了解新框架特性和欣赏她的优美,从这个学习曲线来说是一个最明智的学习方法。

  为什么这么说呢,接下来我就偷偷告诉你一个真实的例子,当年走开发之路,由于自己是半中起家的,也没有什么师傅带领上路,那些年出来是因为穷,也没有去过什么培训机构培训学习,一蒙就干,走了不少弯路子,比如说在学习什么框架或要实现什么功能,上度娘找,拍拍的一堆出来,也不知道那个是对的,找到最后高兴的连运行都没有运行过,自己又在那里卡卡的上车学啊学,弄得自己费了很大的力气学,结果demo也没有运行起来或demo起来后所实现的效果不是自己想要的那种方式,demo中是能实现的,实际自己想要的是两码事或者是一个说东西一个说西两个都不在一边上,最后弄得自己遍体鳞伤。

  这就是人们常常说的混编军和正规军一个意思,混编军就是咱们说的东捡一点东西匆匆就上车啦,只单纯的想混个饭吃吃,碗都没端稳,结果饭都没得吃,正规军就是有套系统的套路给你指引,站站在巨的肩膀上带你飞的那种蓝二代。

  言归正算,正式进入主题,大家在使用JFinal开发项目有没有遇到个问题,配置好路由或指定好了UI部署运行,本想兴奋的打开浏览器访问,结果展现在自己面前是的你访问的地址不存在,报404错误,然后在想为什么出现找不到呢,我不是配置好的了吗?找啊找啊,怎么也找不着,开始怀疑是不是这个框架不行,连这个最简单的地址都显示不出来太二了。

  真理告诉你不是她太二了,而是自己没有理解透,比如说在YourConfig中注册路由访问规则是这样子的:

@Orverder

public void configRoute(Routes me) {

    me.add("/admin/user", IndexController.class,"_back/admin/user");

}

"/admin/user"这个是JFinal映射的路由也就是我们说的访问地址;IndexController.class这个就是我们要注册的控制类;"_back/admin/user"这个是我们User模块UI存放的真实目录。

  接下来就又人问题什么是路由,我引用波总的回答“路由配置是指将 http 请求的 url 映射到 action 的配置,上面的例子,是将路由配置从 JFinalConfig 中脱离出来的例子,这样使得 JFinalConfig 中更清爽 :)”这你总能明白了吧,哈哈。

来个完整理的例子是这样子的:

public UserController extends Controller {

    public void index(){

        render("list.html");

    

    public void add() {

        String method = getRequest().getMethod();

        if ("GET".equals(method)) {

            render("add.html");

        } else if ("POST".equals(method)) {

            redirect("/admin/user");

        }

    }

}

index()这个方法是JFinal默认定义命中的方法,她的界面地址直接就是:render("list.html")到这里有人就问为什么不是这样子写呢?render("_back/admin/user/list.hml"),是这样子的,因为在之前我们不是在注册路由时不是已经配置UserController路由。

接下来add()这个方法中有用到重定向redirect()这个方法,看看他里面的地址配置,是redirect("/admin/user"),又有人问咋是这样子配置的呢,直接redirect("/")不就得了嘛,我说句你试试就知道为什么不这么配置了,redirect既然是重定向意味着路由地址也要重新指定下要不然会给你意想不到结果,如果还是在纠结这个地址我偷偷的告诉你,你可以@私会波总。

  最后来两句使用JFinal开发项目内心真实的话,用过JFinal你就知道她的好、她的简单、她的优美、她的极速,是国人的骄傲值得大家拥有,非常敬佩波总带给我们的精品,在这给波总100个赞,同时也希望我们广大的JFinal粉们奉献你们的一份力量,你们的力量是JFinal发展的动力,力争JFinal遍地开花结果,在这先为广大JFinal粉们喝彩。

评论区

JFinal

2016-12-23 12:51

感谢支持, jfinal 2.3 路由这里有很大的改进,将支持路由级的拦截器,极度方便

lyh061619

2016-12-23 13:03

@JFinal 波总这是必须要做的分享,写得差点^_^!!

FS心情

2016-12-23 16:56

@JFinal 何时2.3?等的着急啊^_^!!

JFinal

2016-12-23 17:01

@FS心情 元旦假期再加班加点往前冲一下,应该就差不多了

lyh061619

2016-12-23 17:12

@FS心情 不用那么着急的,给波总点时间嘛,好东西是搞精磨出来的。^_^

lyh061619

2016-12-23 17:20

@JFinal 波总这急不得,赶出来的项目质量没法保存的哟^_^!

JFinal

2016-12-23 17:50

@lyh061619 @FS心情 质量只是最基本的,更加关键的问题是要确保尖叫,要有足够的冲击力

lyh061619

2016-12-23 22:02

@JFinal 波总这招可以有的,妥妥的。

咔嚓

2017-07-05 09:28

@JFinal 好东西,正在学习中

王晓辉

2017-08-16 18:26

@JFinal
me.add("/user", UserController.class, "/WEB-INF/page/user");
// http://localhost/user/addUser 将 访 问 UserController.addUser() 方 法
me.add("/user/addUser", UserController.class);
// http://localhost/user/addUser 将 访 问 UserController.index()方 法
这种冲突怎么办,它会选择哪个来执行

JFinal

2017-08-16 23:20

@王晓辉 映射路由的时候碰到 actionKey 相同的情况会直接抛出异常,项目将无法启动,也就不存在选择哪个执行的问题了

actionKey 必须是唯一的

王晓辉

2017-08-21 09:59

@JFinal 当然不会写路由的时候有明显的冲突,只是对于这种多级路由的时候比较麻烦,比如/a/b/c/ /a/b/f/ /a/e/h/ 希望的是写个路由控制/ 然后分为/a然后继续往下成不同模块,而不是每个都写完整路由。还有就是对于只是接口路由没有对应页面,它还是会去找页面,然后没找到就会有错误?

windpopul

2017-09-28 10:55

@JFinal 有个问题请教下,jfinal中原来有自动注册路由的方法AutoBindRoutes,新版本里怎么没有了?

JFinal

2017-09-28 22:03

@windpopul jfinal 从来就没有过 AutoBindRoutes 这个东东

热门分享

扫码入社