4.4 DWR(3)
这个页面显示了所有映射后的类。点击CustomerFactory链接来显示一些关于这个类的有用信息,就像图4-7展示的那样。
|
| (点击查看大图)图4-7 DWR测试页面显示:类信息 |
这个页面不仅显示了为了使用这个类而应该包含的<script>元素,还显示了已经声明的方法,甚至还允许我们用简单的数据来测试它们。在开发期间,这种特性的作用是不言而喻的。
如果观察一下<script>元素的URL,会发现即使它们看起来像是JavaScript文件的引用,但实际上它们是在web.xml中声明的DWR servlet的调用。.js文件并不真正存在于文件系统中,而是通过引用由DWR servlet动态生成。
如果我们点击CustomerFactory.js文件的那个链接,那么就会看到图4-8所显示的那样,也就是为映射类中的方法所创建的本地存根。
![]() |
| (点击查看大图)图4-8 DWR动态生成JS纯根 |
|
|
|
在这个处理函数里,传递表单 ,并检查firstName和lastName是否已经全部填入。是的话,远端findByName()方法的存根就会被调用 。
注意,这个存根很像远端方法,但是并不完全一样。首先,调用是异步的,因此这个函数并没有返回值。其次,方法的签名中加入了一个额外的参数来指定在异步调用结束后需要调用的回调函数。其中,将把远端方法的返回值作为这个函数单独的参数传递进去。
回调函数的代码如下:
|
调用回调函数将得到远端方法的返回值。我们简单地对其进行检查以保证它不会是null(回忆一下,当客户并不能唯一被识别时,远端方法将返回null)。如果不是null,那么我们用传递过来的对象的值来填充表单。
DWR已经汇集了来自Customer类的数据,并创建一个拥有同在Customer类中定义的每个JavaBean属性一致的JavaScript对象。在浏览器中,浏览这个示例,并输入客户的名字,结果显示在图4-9中。代码清单4-8列出了完成后的整个页面。
![]() |
| 图4-9 Bill Moody的页面 |
|
|
3.讨论
本节使我们领略了DWR工具集的少部分能力。与其他看过的Ajax工具集不同,DWR抽象了请求响应周期,而提供了一个类RPC的方法来调用服务器上的Java函数。
虽然我们的示例很简单,但也能预想到针对各种客户端任务,如何来使用这样的能力,而并不仅限于数据的查询。想象一下,例如,当执行由服务器端提供的字段数据验证时,这些能力的价值。
显然,DWR仅仅只是对支持servlet引擎的Java Web引用起作用。使用其他服务器端机制的开发者或页面设计者只能使用坚持传统请求响应周期的工具集。
| 回书目 上一节 下一节 |