在Spring Web MVC环境下使用Dojo2011-01-21 IBM 吕焱飞开始之前关于本教程本教程主要探讨如何在 Spring Web MVC 环境中使用 Dojo 的 widget,示例应用使用了 dojox.data.DataGrid,一个 Dojo Toolkit 1.2 新增的 widget 。 Dojo widget 与服务器交换数据的格式有很多种,本教程主要探讨在 Ajax 编程中比较常用的 JSON 格式的数据。本教程示例演示了 dojox.data.DataGrid 组件与 Spring Web MVC 控制器之间交换数据的细节,其中,服务器端使用了 Spring Json View 来呈现 JSON 数据。先决条件本教程假定读者已经熟悉 Spring Web MVC,并能配置相应的环境。但对 Dojo Toolkit 相关知识并无特别要求,教程里会细致讲解相关的 Dojo 知识。系统要求教程中的示例所用的工具和环境如下:JDK 1.6.0+Dojo Toolkit 1.2Spring Framework 2.5.5 及其依赖项Apache Maven 2.0.9Tomcat 6.0.14eclipse 3.4.1Apache HTTP Server 2.2Spring Json View示例用到了 Apache Maven 的 jetty 插件,运行过程中如果显示部分依赖项安装不成功,也请读者从参考资源中找到相应网址,手动下载,并安装到 Maven 本地存储库中。dojo.data 基础传统桌面 MVC 模式中,决定视图(View)内容的是模型(Model),当模型的数据发生了改变,控制器(Controller)一般就会发出指令去刷新视图,桌面 MVC 模式中,模型起到了驱动作用。而用于 Web 的 MVC 则颠倒了视图和模型的驱动顺序,Web MVC 是由客户端对视图的访问,引发了控制器从模型中抽取相应的数据,在这里,视图起到了驱动作用。 Web MVC 的这种特性是由网络协议本身的特征决定的,在客户访问相应的视图之前,服务器不可能知道客户需要的是什么数据。在 Web 应用的开发中,我们都习惯了由视图驱动的 MVC 模式,Dojo 之类 Ajax 工具包的出现却又像是回到了传统的桌面 MVC 模式,起驱动作用的重新变成了模型。 dojo.data 在 Dojo 工具包中起到的作用就相当于桌面 MVC 模式中的模型(Model),各种 Dojo widget 就相当于视图(View)。使用 Dojo widget 只需用某个标签(tag)声明,并在属性中指定提供数据的模型,其他的事情都由框架来完成,一旦与 widget 相关的数据发生了变化,则 widget 相应地会被更新。dojo.data 中的特性(features)Java 或 C++ 都是基于 class 来实现面向对象(Object Oriented),JavaScript 同样是面向对象的,但它的实现机理却很不一样,对此,本教程并不想深入探讨。为了更好理解 dojo.data 中的 feature ,不妨以一个 Java 程序员的眼光来看。撇去实现技术上的差异, dojo.data 中的 feature 就相当于 Java 中的接口(interface)。本教程后面的内容会把特性(feature)当作是接口(interface)的同义词来讲,而事实上两者并不相同,请大家牢记。dojo.data 中的 feature 有以下四种:dojo.data.api.Read 定义了从数据源读取数据的功能接口。dojo.data.api.Write 定义了添加、修改、删除数据条目(item)的功能接口。dojo.data.api.Identity 要求数据源中的每一条(item)数据都必须有唯一的标识符(很像是关系数据库表中的主键),dojo.data.api.Identity 提供的功能接口能够根据标识符快速访问相应的数据条目(item)。dojo.data.api.Notification 定义了事件处理的接口,当数据条目(item)被添加、修改或删除时,就会触发相应的事件,通过覆盖 dojo.data.api.Notification 接口中相应的方法,即可处理对应的事件,这与传统图形界面事件编程机制是相同的。这四种 feature 定义了 dojo.data 所能提供的所有功能接口,具体的实现类则根据不同的数据源(Data Source)来实现相应的功能。这几种 feature 之间的关系可用 UML 图表示,如图 1:图 1 dojo.data 中四种 feature 的 UML 关系图