/u/userId/topics 请求path中间带动态参数,用jfinal如何实现?

jelly_oy 发布于 2015/06/11 10:32
阅读 216
收藏 0

@JFinal 你好,想跟你请教个问题:

最近在学习jfinal ,自己在做一个论坛练练手,遇到个问题:

/u/userId             这个path,我希望跳转到用户的个人中心        (已实现)
/u/userId/topics    这个path,我希望跳转到该用户的发帖列表    (不知道怎么实现)

第2个用jfinal 怎么实现啊
me.add("/u", UserController.class);   路由我是这样加的

请求path中间带动态参数,springmvc好像可以实现这种,
但是用jfinal 如何实现呢?求大神们指导下

加载中
1
铂金蛋蛋
铂金蛋蛋
/**
     * 过滤新闻路径url
     * @param target
     * @param request
     * @param response
     * @param isHandled
     */
    @Override
    public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
        /**
         * "/umectr/loadimg/upload/20140824/43811408815131240.jpg"
         */
        String preffix="";
        String rex="(\\w+)/(\\d{8})/(\\w+)\\.(\\w+)";
        //UME用路由
        if(target.startsWith(preffix_ume)){
            preffix=preffix_ume;
        }else{
            //TODO 系统公共上传下载路由 需要单独提取出来
            preffix=preffix_updown;
        }
        rex=preffix+rex;
        Pattern pattern = Pattern.compile(rex);
        Matcher matcher = pattern.matcher(target);
        UmeditorHandlerFileUrl iu=new UmeditorHandlerFileUrl();
        boolean status=matcher.find();
        if(status){
            iu.setBiaozhi(matcher.group(1));//标志
            iu.setDate(matcher.group(2));//日期
            iu.setFilename(matcher.group(3));//文件名称(不含后缀)
            iu.setSuffix(matcher.group(4));//后缀名 .jpg .abc
        }
        if(status){
            target=makeUrlParam(iu,preffix);
            nextHandler.handle(target, request, response, isHandled);
        }else{
            nextHandler.handle(target, request, response, isHandled);
        }
    }



0
铂金蛋蛋
铂金蛋蛋

简单的路由规则,我直接添加了一个handler,在handler中对业务相关的url进行二次分发

0
jelly_oy
jelly_oy
感觉这是一种折中转换的方式,算是一种间接实现了,我试试看行不行
0
jelly_oy
jelly_oy

引用来自“铂金蛋蛋”的评论

/**
     * 过滤新闻路径url
     * @param target
     * @param request
     * @param response
     * @param isHandled
     */
    @Override
    public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
        /**
         * "/umectr/loadimg/upload/20140824/43811408815131240.jpg"
         */
        String preffix="";
        String rex="(\\w+)/(\\d{8})/(\\w+)\\.(\\w+)";
        //UME用路由
        if(target.startsWith(preffix_ume)){
            preffix=preffix_ume;
        }else{
            //TODO 系统公共上传下载路由 需要单独提取出来
            preffix=preffix_updown;
        }
        rex=preffix+rex;
        Pattern pattern = Pattern.compile(rex);
        Matcher matcher = pattern.matcher(target);
        UmeditorHandlerFileUrl iu=new UmeditorHandlerFileUrl();
        boolean status=matcher.find();
        if(status){
            iu.setBiaozhi(matcher.group(1));//标志
            iu.setDate(matcher.group(2));//日期
            iu.setFilename(matcher.group(3));//文件名称(不含后缀)
            iu.setSuffix(matcher.group(4));//后缀名 .jpg .abc
        }
        if(status){
            target=makeUrlParam(iu,preffix);
            nextHandler.handle(target, request, response, isHandled);
        }else{
            nextHandler.handle(target, request, response, isHandled);
        }
    }



恩,这个方法我已经尝试了,可以实现,是一种解决办法! 顶一个!
jelly_oy
jelly_oy
回复 @铂金蛋蛋 : 是的,换个角度,其实是一样的!哈哈
铂金蛋蛋
铂金蛋蛋
其实如果不用handler这种方式,换个设计思路 /u/topics/userId 这样的纬度不是也不错么?
0
JFinal
JFinal

url 中参数是放在中间还是放在末尾,本质上功能都是一样的,jfinal 是建议放后面,因为这个与编程序语言的方法定义在感觉上是一致的:

public void topic(int userId) {
  // do something;
}

   应该是几乎所有编程语言参数都是放在方法名的后方的,所以 url 的参数也沿用这样的风格比较自然,方法放前面,方法所需要的参数放后面。

   参数放后面,在传递多个参数时会显得更加自然。jfinal 也曾考虑过参数放中间的风格,权衡后放弃了这种风格。

0
jelly_oy
jelly_oy

引用来自“JFinal”的评论

url 中参数是放在中间还是放在末尾,本质上功能都是一样的,jfinal 是建议放后面,因为这个与编程序语言的方法定义在感觉上是一致的:

public void topic(int userId) {
  // do something;
}

   应该是几乎所有编程语言参数都是放在方法名的后方的,所以 url 的参数也沿用这样的风格比较自然,方法放前面,方法所需要的参数放后面。

   参数放后面,在传递多个参数时会显得更加自然。jfinal 也曾考虑过参数放中间的风格,权衡后放弃了这种风格。

恩,波总说的有道理,自然就是美!
返回顶部
顶部