dwr框架总结(实例解析)

<!DOCTYPE dwr PUBLIC

"-//GetAhead Limited//DTD Direct WebRemoting 1.0//EN"

"">

<dwr>

<allow>

<create creator="new"javascript="catalog">

<param name="class"

value="developerworks.ajax.store.CatalogDAO"/>

<includemethod="getItem"/>

<includemethod="findItems"/>

</create>

<convert converter="bean"

match="developerworks.ajax.store.Item">

<param name="include"

value="id,name,description,formattedPrice"/>

</convert>

</allow>

</dwr>

dwr.xml 文档的根元素是 dwr。在这个元素内是allow 元素,它指定 DWR 进行远程的类。allow 的两个子元素是create 和 convert。

create元素

create 元素告诉 DWR 应当公开给 Ajax 请求的服务器端类,并定义 DWR 应当如何获得要进行远程的类的实例。这里的 creator 属性被设置为值 new, 这意味着 DWR 应当调用类的默认构造函数来获得实例。其他的可能有:通过代码段用 Bean 脚本框架(Bean Scripting Framework,BSF)创建实例,或者通过与 IOC 容器 Spring 进行集成来获得实例。默认情况下,到 DWR 的 Ajax 请求会调用creator,实例化的对象处于页面范围内,因此请求完成之后就不再可用。在无状态的 CatalogDAO 情况下,这样很好。

create 的 javascript 属性指定从 JavaScript 代码访问对象时使用的名称。嵌套在create 元素内的 param 元素指定 creator 要创建的 Java 类。最后,include 元素指定应当公开的方法的名称。显式地说明要公开的方法是避免偶然间允许访问有害功能的良好实践 —— 如果漏了这个元素,类的所有方法都会公开给远程调用。反过来,可以用exclude 元素指定那些想防止被访问的方法。

convert元素

creator 负责公开用于 Web 远程的类和类的方法,convertor 则负责这些方法的参数和返回类型。convert 元素的作用是告诉 DWR 在服务器端Java 对象表示和序列化的 JavaScript 之间如何转换数据类型。

DWR 自动地在 Java 和 JavaScript 表示之间调整简单数据类型。这些类型包括 Java 原生类型和它们各自的类表示,还有 String、Date、数组和集合类型。DWR 也能把 JavaBean 转换成JavaScript 表示,但是出于安全性的原因,做这件事要求显式的配置。

中的convert 元素告诉 DWR 用自己基于反射的 bean 转换器处理 CatalogDAO 的公开方法返回的Item,并指定序列化中应当包含 Item 的哪个成员。成员的指定采用 JavaBean 命名规范,所以 DWR 会调用对应的get 方法。在这个示例中,我去掉了数字的 price 字段,,而是包含了 formattedPrice 字段,它采用货币格式进行显示。

现在,我准备把 dwr.xml 部署到 Web 应用程序的WEB-INF 目录,在那里 DWR servlet 会读取它。但是,在继续之前,确保每件事都按照希望的那样运行是个好主意。

远程 Java 对象方法和对应的 JavaScript 存根函数之间的映射很简单。通用的形式是JavaScriptName.methodName(methodParams …, callBack),其中JavaScriptName 是creator 的 javascript 属性指定的名称,methodParams 代表 Java 方法的n 个参数,callback 是要用Java 方法的返回值调用的 JavaScript 函数。如果熟悉 Ajax,可以看出这个回调机制是XMLHttpRequest 异步性的常用方式。

在示例场景中,我用清单 3 中的 JavaScript 函数执行搜索,并用搜索结果更新用户界面。这个清单还使用来自 DWR 的 util.js 的便捷函数。要特别说明的是名为$() 的 JavaScript 函数,可以把它当作 document.getElementById() 的加速版。录入它当然更容易。如果您使用过 JavaScript 原型库,应当熟悉这个函数。

谦受益,满招损。

dwr框架总结(实例解析)

相关文章:

你感兴趣的文章:

标签云: