开发者社区 问答 正文

Jfinal的ActionKey能否配置通配符,不固定Action。 400 请求报错 

需求如下:
动态生成的静态html页面在webapp下的doc目录中,但是在doc下的目录级数不固定,是根据文件名字动态生成的,如名字为index,则生成的html页面为:webapp/doc/index.html;名字为2014-02-23-index,则生成的html页面为:webapp/doc/2014/02/23/index.html。以此类推。
有一个HtmlController接收/doc的请求,可以renderJsp("/doc/")跳转到doc目录下,
但是现在如何根据不同的/doc的请求返回不同的目录呢?如 请求:/doc/2014,renderJsp("/doc/2014"); 请求:/doc/2014/02,renderJsp("/doc/2014/02"); 以此类推。
我记得spring mvc有类似的配置通配的功能,Jfinal能实现类似需求吗
@Jfinal

展开
收起
kun坤 2020-05-30 17:27:45 735 分享 版权
1 条回答
写回答
取消 提交回答
  • url目前不支持通配符,像你说的需求可以通过参数的不同render不同的渲染,或者你可以写自己的handler来处理你的全局请求和响应######    JFinal Handler 可以无限扩展路由规则,因为它可以改变到达的 url 值,该值在 Handler 类中是 String target。具体点是创建一个 DocHandler 和一个 DocController 配合处理,大致代码如下:

    public class DocHandler extends Handler { public void handle(String target,HttpServletRequest request,HttpServletResponse response,boolean[] isHandled) { if (target.startsWith("/doc")) { target = target.substring(0, 4); request.setAttribute("view", target.substring(4)); } nextHandler.handle(target, request, response, isHandled); }
    DocController 就更简单了,一行代码搞定:

    render(getAttr("view"));
    ######明白了,多谢!######     其实还可以更省代码:
    public class DocHandler extends Handler {
      public void handle(String target,HttpServletRequest request,HttpServletResponse response,boolean[] isHandled) {
      if (target.startsWith("/doc")) {
        RenderFactory.me().getJspRender(target.substring(4)).setContext(request, response).render();
        isHandled[0] = true;
      }
    }
    这样就连 DocController 都不需要了
    2020-05-30 17:27:51
    赞同 展开评论