8
回答
怎么将一个page的运行时间注入到模板里用来显示、
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

long start = System.currentTimeMillis();
        nextHandler.handle(target, request, response, isHandled);
        long end = System.currentTimeMillis();
        logger.debug("URL:["+ target + "],rending time:[" + (end - start) + "]ms");



怎么讲 时间 注入到 模板里 ,用来显示 。如:request.setAttribute("rendingTime",(end-start));

@JFinal

举报
红星xx
发帖于4年前 8回/304阅
共有8个答案 最后回答: 4年前

引用来自“JFinal”的答案

     在 Controller 或者 Interceptor 中使用 setAttr(key, value),然后在页面 ${key}
就是不知道 怎么 在 handle 里将 将这个时间注入到 Controller  ,

引用来自“红星xx”的答案

引用来自“JFinal”的答案

     在 Controller 或者 Interceptor 中使用 setAttr(key, value),然后在页面 ${key}
就是不知道 怎么 在 handle 里将 将这个时间注入到 Controller  ,
在 handler 中通过 request.setAttribute(key, value) 来做

因为 结果 在 nextHandler.handle(target, request, response, isHandled); 语句下,我曾经将您这句放在 下面 , 我也试了 ,不行 ,取不到

页面都已经渲染完了还怎么放?除非放到一个缓存中,例如session,在客户端页面展现时用ajax再获取一下。

引用来自“JFinal”的答案

引用来自“红星xx”的答案

引用来自“JFinal”的答案

     在 Controller 或者 Interceptor 中使用 setAttr(key, value),然后在页面 ${key}
就是不知道 怎么 在 handle 里将 将这个时间注入到 Controller  ,
在 handler 中通过 request.setAttribute(key, value) 来做
因为 结果 在 nextHandler.handle(target, request, response, isHandled); 语句下,我曾经将您这句放在 下面 , 我也试了 ,不行 ,取不到

可不可以这么干呢?

long start = System.currentTimeMillis();
request.setAttribute("start",start);



var processTime = new Date().getTime() - ${start };
document.write("页面耗时:" + processTime + "毫秒。");



我乱想的,勿喷啊

    不好意思,前天没看清楚你的问题。JFinal Handler 的 nextHandle.handle(...)方法被调用之后页面已经被渲染,此时已经没有机会再往页面中输出数据。

    楼主可以使用拦截器来做,不过即便是拦截器,其实也是注入的 action的调用时长,如果楼主确实只想知道页面渲染时长,可以类似于如下的处理:

public class MyRender extends FreeMarkerRender {
  public void render() {
    long start = System.currentTimeMillis();
    super.render();
    long end = System.currentTimeMillis();
    logger.debug(end - start);
  }
}

    然后可以在 controller 中通过,render(new MyRender(...)) 来看效果,还可以通过扩展 IMainRenderFactory 将MyRender 做成 main render,这样就可以在 controller 通过 render(...) 来使用了

顶部