`
lgf444
  • 浏览: 79115 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

DWR中文文档v0.9 06

    博客分类:
  • AJAX
阅读更多

第5章. DWR中的JavaScript简介
DWR根据dwr.xml生成和Java代码类似的Javascript代码。

 相对而言Java同步调用,创建与Java代码匹配的Ajax远程调用接口的最大挑战来至与实现Ajax的异步调用特性。

 DWR通过引入回调函数来解决这个问题,当结果被返回时,DWR会调用这个函数。 有两种推荐的方式来使用DWR实现远程方法调用。可以通过把回调函数放在参数列表里,也可以把回调函数放到元数据对象里。

当然也可以把回调函数做为第一个参数,但是不建议使用这种方法。因为这种方法在处理自动处理http对象时(查看"Alternative Method")上会有问题。这个方法主要是为向下兼容而存在的。
5.1 简单的回调函数
假设你有一个这样的Java方法:

public class Remote { 
   public String getData(int index) {
     ... 
    }
 }

 我们可以在Javascript中这样使用:

<script type='text/javascript' src='[WEBAPP]/dwr/engine.js'></script> 
<script type='text/javascript' src='[WEBAPP]/dwr/interface/Remote.js'>
</script>
 …… 
<script type="text/javascript">
    function handleGetData(str) {
      alert(str); 
    } 

    Remote.getData(42, handleGetData);
 </script>

 42是Java方法getData()的一个参数。 此外你也可以使用这种减缩格式:

Remote.getData(42, function(str) { alert(str); });

  5.2 调用元数据对象
另外一种语法时使用"调用元数据对象"来指定回调函数和其他的选项。上面的例子可以写成这样:

Remote.getData(42, { 
    callback:function(str) { alert(str); } 
});

 这种方法有很多优点:易于阅读,更重要的指定额外的调用选项。 在回调函数的元数据中你可以指定超时和错误的处理方式。例如:

Remote.getData(42, { 
   callback:function(str) { alert(str); }, 
   timeout:5000, 
   errorHandler:function(message) { alert("Oops: " + message); } 
});

 5.3 查找回调函数
有些情况下我们很难区分各种回调选项(记住,Javascript是不支持函数重载的)。例如:

Remote.method({ timeout:3 }, { errorHandler:somefunc });

 这两个参数之一是bean的参数,另一个是元数据对象,但是我们不能清楚的告诉DWR哪个是哪个。为了可以跨浏览器,我们假定null == undefined。 所以当前的情况,规则是:
 如果第一个或最后一个是一个函数,那么它就是回调函数,没有元数据对象,并且其他参数都是Java的方法参数。
 另外,如果最后一个参数是一个对象,这个对象中有一个callback成员,并且它是个函数,那么这个对象就是元数据对象,其他的都是Java方法参数。
 另外,如果第一个参数是 null ,我们就假设没有回调函数,并且其他的都是Java方法参数。尽管如此,我们会检查最后一个参数是不是null,如果是就发出警告。
 最后如果最后一个参数是null,那么就没有callback函数。
 另外,发出错误信号是个糟糕的请求格式。
 
5.4 创造一个与Java对象匹配的Javascript对象
假设你有这样的Java方法:

public class Remote { 
   public void setPerson(Person p) { 
        this.person = p; 
   } 
}

 Person对象的结构是这样的:

public Person { 
     private String name; 
     private int age;
     private Date[] appointments;
     // getters and setters ... 
}

 那么你可以在Javascript中这样写:

var p = { 
   name:"Fred Bloggs", 
   age:42, 
   appointments:[ new Date(), new Date("1 Jan 2008") ] 
}; 
Remote.setPerson(p);

 在Javascript没有出现的字段,在Java中就不会被设置。 因为setter都是返回'void',我们就不需要使用callback函数了。如果你想要一个返回void的服务端方法的完整版,你也可以加上callback函数。很明显DWR不会向它传递任何参数。

分享到:
评论

相关推荐

    DWR中文文档v0.9PDF

    DWR中文文档v0.9

    DWR中文文档v0.9

    DWR中文文档v0.9 DWR2.0 方佳玮 编著 部分原创/部分整理/部分翻译

    DWR中文文档v0.9+DWR.jar+JS

    DWR中文文档v0.9+DWR.jar+JS

    DWR2.0中文文档V0.9

    资源名称:DWR 2.0中文文档 V0.9内容简介: Ajax向我们袭来的时候,很多写代码的程序员看到了Ajax的发展前景,但并不是每一个程序员都能将页面与代码完美整合在一起,DOM、CSS、javascript让人眼花缭乱,不知...

    DWR中文文档和dwr.jar包

    DWR中文文档和dwr.jar包 DWR中文文档v0.9Ajax向我们袭来的时候,很多写代码的程序员看到了Ajax的发展前景,但并不是每一个程序员都能将页面与代码完美整合在一起,DOM、CSS、javascript让人眼花缭乱,不知从何下手。...

    DWR中文官方文档

    DWR的中文官方文档,以及V0.9的文档一共两份 在网站不容易找到合适的说明.这个包里是整合网站的dwr所有帮助信息下载下来的,因为时间缘故没有及时做成电子文档,希望有时间了在做一份. 如果还是看着不方便建议到...

    dwr框架简介PDF

    本文件介绍了一些dwr框架的知识,对初学者有一定的帮助.

Global site tag (gtag.js) - Google Analytics