Welcome

首页 / 脚本样式 / Dojo Toolkit / 在Spring Web MVC环境下使用Dojo

在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.2

Spring Framework 2.5.5 及其依赖项

Apache Maven 2.0.9

Tomcat 6.0.14

eclipse 3.4.1

Apache HTTP Server 2.2

Spring 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 关系图