使用 HTML 和 JavaScript 为 Lotus Domino 创建一个 Web 2.0 风格的瘦 Web 客户机。基于以前有关 IBM Lotus Domino XML (DXL) 框架的文章,本文向您介绍如何使用 Ajax 扩展 Notes/Domino 应用程序。
在文章 “访问 Notes/Domino 数据的定制 DXL 框架” 中,我向您介绍了 Lotus Domino XML (DXL) 框架。从这篇文章中,您学习了如何使用此 DXL 框架来允许其他应用程序创建、查看和更新 Notes 文档。之后通过三个 LotusScript 代理,您又学习了如何查看 DXL 文档、如何通过 DXL 创建文档以及如何通过 DXL 更新文档。
在另一篇文章 “为 Domino 构建 JSR 168 门户应用程序” 中,您学习了如何使用 Java Specification Requests (JSR) 168 portlet 创建 Notes/Domino 数据库的前端。
本文将继续学习 Lotus Domino DXL 框架,为 Lotus Notes/Domino Contacts 数据库构建一个 Web 2.0 风格的瘦 Web 客户机。我们使用宿主在 Domino 服务器上用 CSS/JavaScript 构建的平面式 HTML 文件访问使用 Ajax 的 Domino 数据库,另外,我们还会使用以前文章中的一些元素来创建此 Web 2.0 客户机。
本文假设您是有经验的 Notes/Domino 应用程序开发人员并了解 JavaScript。
|
什么是 Web 2.0?
Web 2.0 这个术语是由 Tim O'Reilly 在 2005 年的一次会议上引入的。这个术语代表了下一代 Web 应用程序,这些程序采用了正确的 Web 设计原则构建并且利用了 HTTP 的简单性。一些常见的 Web 2.0 应用程序包括 Google AdSense、Flickr 和博客。从那时起,便对这个术语进行了概括,目的是形成一种 Web 应用程序的概念和趋势。其核心前提是这些 Web 应用程序将 Internet 用作它们的平台并将功能作为服务公开,这些服务是根据用户或其他应用程序(换句话说,这些应用程序使用这些服务)的需要提供的,以便向用户提供有意义的、内容丰富的应用程序。支持 Web 2.0 的应用程序的技术和概念如下:
JavaScript:选中的语言
随着 Web 2.0 风格的应用程序的普及,JavaScript 发挥了重要的作用。由于 JavaScript 是灵活的脚本语言,而且几乎能被所有 Web 浏览器解析,因此,可以对其进行扩展以包括面向对象的结构,而且也可以用来构建复杂的 Web 应用程序。我们可以将 JavaScript 函数用作对象、方法以及传统过程函数。您将看到如何在平面式 HTML 上采用 JavaScript 实现 MVC (Model View Controller) 模式。
|
关于此应用程序
Lotus Domino 的 Web 2.0 客户机由一个 HTML 文件和支持脚本、图像以及样式表组成。最好使用 Mozilla Firefox 查看此应用程序。本文使用 Firefox 作为浏览器平台。
图 1 显示了应用程序的主页面。这是用户在自己的浏览器中打开 Web 2.0 客户机之后首先看到的屏幕。
可以单击 Read Documents 或 Create Documents 链接。单击 Read Documents 之后,会看到一个类似于图 2 的屏幕。在我们的示例中,显示 Contacts 数据库(基于 Lotus Notes Personal Address Book 模板的数据库)中的姓名和电子邮件地址。
此时,可以单击 Create Document 或单击其中一个条目查看更多详细信息。让我们单击视图中的第一个条目。出现图 3 ,其中显示 Contacts 数据库中的关键文档字段。
在左侧提供了一个微型导航视图,其中有姓名清单。可以选择单击微型导航视图中的一个条目来查看此文档的详细信息,或者通过单击 Edit 图标编辑显示的文档。然后,便可以编辑此文档,单击 Save 图标可保存更改。也可以通过单击 Close 或者单击其他任何链接来取消更改。
如果想创建一个文档,则单击菜单中的 Create Document 图标。这会弹出一个空白的表可用来创建新的文档(参见图 4)。可以在其中输入必要的详细信息并单击 Save 以创建新的文档。
应用程序中的文件
Lotus Domino 的 Web 2.0 客户机由一个 HTML 页面和 JavaScript 支持文件组成,它们用于完成用户执行的各种操作。由级联样式表 (CSS) 和图像控制显示。图 5 显示了各种文件之间的关系。dxl.html 文件是一个平面式的 HTML 文件,它使用 style.css 格式化内容的表现形式,使用 dojo.js、controller.js 和 model.js 执行任务。
所有这些文件都位于 ...data/domino/html 目录下一个名为 web2.0 的目录中。托管的 Domino 服务器在 Microsoft Windows XP 上运行 V7.0.1。出于这里的应用程序的需要,服务器还支持基本的 Web 身份验证。如果想启用基于会话的身份验证,请参阅本文中后面的“部署”一节以获得所需步骤。
除此之外,还会使用 “访问 Notes/Domino 数据的定制 DXL 框架” 文章中介绍的 DXL 代理并将其导入到 Contacts 数据库中。
设计原则
由于 JavaScript 有助于过程式编程,因此,可以使用传统方法来构造构建应用程序所需的各种函数。但是,它不容易维护。因而,您会希望构建应用程序就如同使用自己喜爱的 Web 应用程序服务器(J2EE、Microsoft .NET、PHP 等等)构建一个三层的 Web 应用程序一样。这意味着需要保持关注点分离,并且需要在部署单元内像调用一样分组。实际上,可以通过对瘦 Web 应用程序应用 Model View Controller 设计原则来实现这些目标。
您可能还希望能够尽可能多地坚持 DRY(不要重复自己)这个原则。为了实现这个目标,可以使用 JavaScript 的闭包功能,该功能允许将函数视为数据来创建类和对象。然后,可以定义要使用的类和对象,采用的方法与我们在 JSR-168 portlet 示例(请参阅文章 “为 Domino 构建 JSR 168 门户应用程序” )中使用的方法基本相同。
|
表示设计
现在,来看看如何使用 MVC 构建简单的 Web 应用程序。图 6 显示了相关的对象、它们公开的方法以及它们所属的部署单元。
此视图由主页 (dxl.html) 处理;它还具有 helper 函数以及用于维护信息的全局变量。主要视图组件如下:
模型由模型 JavaScript 文件 (model.js) 中的代码处理。它定义的主类为 people(包含来自 Domino 视图的信息)和 person(包含有关 Domino 联系信息文档的信息)。
控制器由控制器 JavaScript 文件 (controller.js) 处理,并且包含执行其工作所使用的几种方法和属性。此类的主要方法为 action,它基于用户执行的操作处理视图中应显示的相应信息。控制器还使用 Ajax 调用访问相应的 Domino 资源、填充相应的 model 对象并且将其传递给视图进行显示。反过来,视图初始化控制器的实例并且指派所有操作和决定。
注意:理想情况下,可以将数据访问逻辑分隔到它自己的部署单元中并且保持控制器没有被混杂。但是,为了简单起见,我们选择将其组合。作为练习,您可以对代码进行重构以将数据访问函数分离到单独的文件中。
一些常见过程的流程如图 7 中所示。
|
相关代码
这里不再详细介绍整个应用程序,而只关注一下应用程序的突出点以及如何实现 MVC 模式的部分。
按顺序引用外部的 JS 文件
首先,dxl.html 文件以优先顺序加载 JavaScript 文件:
建立关键的全局对象
下一步,应用程序将控制器对象作为全局变量进行实例化。这对设计非常关键,原因是用户执行的每个视图操作都被发送到该控制器进行处理。出于管理的目的(如查看字段中更改的值),应用程序还建立了其他全局对象。代码传递在此局部网页中引用的控件的字符串值,以便在其显示视图对象时控制器对象可以引用该值。