进行AJAX的时候处理浏览器的不兼容性。客户端JavaScript库类似Dojo toolkit中的那些,隐藏了很多不同浏览器处理AJAX的不同方法。例如,dojo.io.bind()方法请求封装了XMLHttpRequest,可以处理IE创建异步请求时的不同。Prototype为DOM操作提供的对象隐藏了浏览器处理DOM相关操作时的不同。另外,客户端JavaScript库包含了功能退化("graceful degradation")特性,以处理AJAX不能支持的情况-使你不必编写代码来应对那种可能性。
处理一些常见的AJAX问题,比如书签和后退按钮支持。众多的客户端JavaScript库提供书签和后退按钮的支持。例如,你可以通过将dojo.io.bind()的changeURL参数设为true就可以轻易的为bookstore2程序添加书签支持。
dojo.require("dojo.io.*");
...
// This function is called after initial timeout that represents the delay
bpui.alone.showPopupInternal=function(popupx, bookId) {
// retrieve data through dojo call
var bindArgs = {
url: "../PopupServlet?bookId=" + escape(bookId),
mimetype: "text/xml",
load: bpui.alone.ajaxReturnFunction};
changeURL:true;
// dispatch the request
bpui.alone.req=dojo.io.bind(bindArgs);
为这些工具设立的用户社区可以帮助回答疑问。类似Dojo toolkit的著名客户端库拥有著名的用户社区,通过基于社区的论坛和博客提供支持和帮助。另外,Dojo之类的开源库社区参与进行对库的扩展和增强。这包括公司的支持和贡献。例如,Dojo基金会,一个为促进使用Dojo 和 JavaScript而设立的非盈利性组织,获得了IBM 和 Sun Microsystems公司等的赞助和积极协助。
反面
需要一些JavaScript知识。客户端JavaScript库不能排除对JavaScript编码的需要。最多降低了编写JavaScript代码的需要。在更新的bookstore2例子里,使用Dojo toolkit排除了编码创建、配置和使用XMLHttpRequest对象的需要,但你同样要编码调用封装了XMLHttpRequest请求的dojo.io.bind()函数。
可能需要混合和匹配JavaScript库。这可以被看作优点和缺点。如果一个单独的JavaScript库不能给你所需的功能,你可以灵活的从其他的JavaScript库获得另外的功能,从同一个或这另一个工具箱里。不会限制你只能在web应用里使用一个客户端JavaScript库。例如,你可以使用Prototype对象来同服务端进行AJAX通信,使用Dojo toolkit里的窗口部件实现UI。灵活是一件好事。尽管如此,不同的客户端库来源有自己语法结构,所以你需要学习使用这些库的不同方法。
可能无法满足所有的AJAX需求。有这种可能性,客户端JavaScript库不会满足所有的将AJAX置入web应用的JavaScript需要。因此你需要另一种方法来满足其他的需求。
设计策略3:使用客户端框架
将AJAX置入web应用的另一种方法是使用客户端框架。有许多客户端框架供你使用,包括JavaServer Faces框架例如Java EE 5 SDK, ICEfaces, Ajax4jsf, 和 Project Dynamic Faces中的那些。同样有其他类型的客户端框架,例如Direct Web Remoting (DWR), 和 the Google Web Toolkit (GWT),他们不是基于JavaServer Faces的。本节将讨论JavaServer Faces的使用。Project Dynamic Faces -- a Variation on Adding AJAX to JavaServer Faces Technology Components一节将讨论Project Dynamic Faces。Design Strategy 5: Go Remote 讨论 DWR,Design Strategy 6: Go All Java Technology 一节讨论GWT。
JavaServer Faces,经常被称为JSF,为简化建立丰富的UI web应用而设计。这个技术的核心是一个强大的组件模型。可以提供一系列API表现UI组件并管理它们的状态。这些API也为开发者提供编程处理组件的事件,转换和验证输入数据的方法。JavaServer Faces UI组件实际上是服务端的组件。它们在服务端运行并在客户端呈现,可以响应客户端的事件。
使用JavaServer Faces的好处之一是它允许页面作者可以在自己的页面上使用UI组件而不必知道组件工作的细节。典型的,这些组件在JSP页面上使用JSP标记-虽然这不是表现组件的唯一方式。对页面作者来说,在页面里包含JavaServer Faces UI组件与使用JSP标记一样简单。JavaServer Faces核心组件的JSP标记库被作为该技术的标准部分提供。