分享

DWR 3.0 反Ajax 实现!

 javaxiaop 2010-10-20

我狂晕!

妈的~

居然...

找了半天网上居然没有DWR 3.0 的 反相Ajax的例子代码!

全是2.x的代码!

我郁闷了!

 

没办法,项目需求,硬着头皮上吧,狂看了官方的文档

(说实话,是我看过的最烂的文档)

终于,搞出了一个例子,有点烂,不过,还算是反相Ajax,而且没有一个类是官方“抛弃的”

(也就是建议不使用的类)

如下:

   <create creator="new" javascript="ChatManager"> 
        <param name="class" value="com.template.web.CharOnline"/> 
    </create> 

基本的dwr开放类配置

public class CharOnline {

 public void TestAjax() {
  String page = ServerContextFactory.get().getContextPath() + "/Char.jsp";
  Browser.withPage(page,new Runnable()
  {
      public void run()
      {
          ScriptSessions.addFunctionCall("test2", new Object());
      }
  });
 }
}

这个就是处理类,可以看到比2.x的时候精简了很多!

它的主要功能就是,String page存放的是你需要 服务器推送 数据的网页!

这个和2.x有很多区别,2.x的时候,是需要你自己保存

访问某个页面的用户的sessionId来成为列表

而3.x是以一个页面为单位,只要是访问了这个页面的用户,都会被推送数据

当然个例子是最最简单的例子,其实推送的列表是可以自己变更和筛选的

(dwr提供了Filter,要区别哦,不是web.xml那个Filter)

 

DWR会开启一个线程作为推送的线程(其实是遍历存在列表的用户,然后推送数据)

ScriptSessions.addFunctionCall();

这个是推送的js指令

也就是说DWR所做的反向Ajax,推送的不是字符串,不是json对象,而是推送 js 代码!

addFunctionCall(" js function name " ," parameters " );

这个就是推送一行js代码,调用了你的页码的js函数!

(当然还有很多函数,有的可以直接发送你想执行的js函数)

 

页面端:

dwr.engine.setActiveReverseAjax(true);

启用反向Ajax(这个是 服务器推模式 而不是长连接 和 轮询 )

然后

function test(){
 ChatManager.updateCharUsersList();
}
function test2(){
 alert("Test Success!");
}

test 是 用户点击的时候执行的函数,也就是发送ajax请求

test2是 服务器推时的响应函数,可以带参数(从后台传过来的),这里只是简单的打印

(上面的函数对应 服务器端的  ScriptSessions.addFunctionCall("test2",null);)

 

这样的效果是,你开多个浏览器,访问同个页面(有反ajax的页面),那么只要有一个浏览器

点击发送,那么全部的浏览器都会打印"Test Success!"

 

我拿它做在线聊天,你呢?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多