dwr的蛋疼问题

最近在使用dwr, 与之前相比 除了让人非常蛋疼的问题, 先描述如下:

   第一个问题是服务器向客户端推送的时候,

 1 Browser.withCurrentPage(new Runnable() {
 2             ScriptBuffer sb = new ScriptBuffer();
 3             public void run() {
 4               //  ScriptSessions.addFunctionCall("receiveMessages", msg);
 5                 
 6                 //ScriptBuffer sb = new ScriptBuffer();
 7                 sb.appendScript("receiveMessages(");
 8                 sb.appendData(msg);
 9                 sb.appendScript(")");
10                 WebContextFactory.get().getScriptSession().addScript(sb);
11                 
12             }
13         });

使用该方法推送给当前的session使用, 可是我之前测试总是在全部推送完毕后, 才在页面做接收, 也就是看不到 一条一条记录推送的效果! 无奈研究了一天, 使用了N种办法都没有得到 解决, 无奈使用

ScriptSessions.addFunctionCall("receiveMessages", msg);

该句进行全部推送, 本来以为 就风平浪静了!

    事情总是事与愿违啊, 今天用到项目中后,紧接着第二个问题出现了,那么是什么呢,就是每次推送到最后一条记录的时候 , 会把前边的一次在全部推送出来, 比如 我送了记录一 记录2 记录3  当推送到 记录3的时候  会再把1,2,3 重新显示一边!

    也就是出来的效果是  结果1,结果2 , 结果3, 结果1, 结果2, 结果3!

    简直是蛋疼无比!

 

   于是乎 我展开了 百度 google 无尽的搜索当中, 皇天不负有心人, 终于在无意之中看到一个帖子, 哎, 如果英文好, 何必现在呢, 早就应该能搜索到了!

   搜到的帖子如下  http://directwebremoting.org/bugs/browse/DWR-364    来自其官方的网站 bugs提交。

  后来在页面 引用了 其中一段代码,竟然神奇的好了!  单独提送也没有问题了!

 1  function initReverseAjax() {
 2        if (dwr.engine._scriptSessionId == null) {
 3           setTimeout("initReverseAjax()", 2000);
 4        } else {
 5           dwr.engine.setActiveReverseAjax(true);
 6        }
 7     }
 8 
 9   
10     function onLoadPage() {
11          dwr.engine.setNotifyServerOnPageUnload(true);
12        //  dwr.engine.setActiveReverseAjax(true);
13        initReverseAjax();
14          dwr.engine.setErrorHandler(errorHandler);
15           //刷新页面时 销毁 原先创建的scriptSession
16 
17          doImport.dwrImport(${modelId}, ${importType}, '${matchStr}');
18     }

特发帖以此纪念! 这蛋疼的js  这蛋疼的dwr!

posted @ 2013-11-18 10:25  gavinage  阅读(1207)  评论(0编辑  收藏  举报