`
tianxinet
  • 浏览: 263468 次
  • 性别: Icon_minigender_1
  • 来自: Net
社区版块
存档分类
最新评论

AjaxStruts(在Struts中使用Ajax简介)

阅读更多

AjaxStruts

作者:struts开发组   翻译:tianxinet(胖猴)

(本文介绍了ajax的基本工作原理,提供了一些在struts中及单独使用ajax的非常有用的资源。)

介绍

本文介绍怎样在struts中使用AJAX

基础

作为开始,这里有一篇文章和一个相当有趣的web程序的例子,下面是链接(如果有兴趣可以看一下,或看完本文后去看,它有具体的struts+ajax的应用文章和示例。可以把本文当作引子):

<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_s1030" style="WIDTH: 8.25pt; HEIGHT: 8.25pt" o:button="t" href="http://www.omnytex.com/articles" alt="[WWW]" type="#_x0000_t75"><v:imagedata o:href="http://wiki.apache.org/wiki/modern/img/moin-www.png" src="file:///C:\DOCUME~1\chenyong\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></v:imagedata></v:shape>http://www.omnytex.com/articles

这里的文章介绍了一些不错的关于使用XMLHttpRequest的信息,并且对web程序的例子作了一些解释。

这个web实例程序演示了XMLHttpRequest的6种不同用法,包括table的动态排序,动态更新一个<select>元素,动态装载一个<textarea>RSS解析器等。

这儿有一些图表可以帮助你了解AJAX怎样工作:

传统web应用模式(左)与Ajax应用模式(右)的比较。

 

传统web应用的同步模式与Ajax应用异步模式的比较。 

记住AJAX不是特殊的技术实现是很重要的,它是一种途径、一种技巧、一种考虑事情的方法。它是一种普遍认同的使用XMLHttpRequest发送和接收XML的方法,但不是唯一的方法。你根本不应该有这种印象:你不得不处理XML或你不得不使用XMLHttpRequest对象。

说到底,AJAX request和其他HTTP request没有区别。记住这一点,可以很容易的看到任何AJAX库将和Struts一起工作的很好。真正的不同是和request一起提交的东西,它可能就是一个request参数的集合,在这种情况下你象往常那样书写struts代码,代码不会有区别;也可能是POST body中的XML;也可能是JSON(译者注:JavaScript Object Notation,一种轻量级数据交换格式,在此向大家推荐,不错的东东),看起来象这样:

{ "firstName":"Frank","lastName":"Zammetti" }

server端解析它是相当微不足道的,甚至在client端解析也是很容易的。

eval("json = (" + INPUT_JSON + ")");

假定 INPUT_JSON 是上面展示的 JSON数据,你可能访问一个名叫jsonjavascript变量--从你能够得到的一段数据中,象这样:

var firstName = json.firstName;
var lastName = json.lastName;

这很简单,尤其是在client(解析XML是很小的开销)变得很流行。关于JSON的更多信息,包括大量很容易能解析和创建JSONjava类,见<v:shape id="_x0000_s1031" style="WIDTH: 8.25pt; HEIGHT: 8.25pt" o:button="t" href="http://www.json.org/" alt="[WWW]" type="#_x0000_t75"> <v:imagedata o:href="http://wiki.apache.org/wiki/modern/img/moin-www.png" src="file:///C:\DOCUME~1\chenyong\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></v:imagedata></v:shape>http://www.json.org

但是,要点是如果request提交的东西是XMLJSON,或其它你自己创建的数据格式,那么你不得不在sever上解析并处理它,这意味着你不能使用Struts的所有能力,比如auto-population, validation等。

有几百种AJAX库,或是XMLHttpRequest之上的抽象层、或是AJAX-enabled的窗口部件或者其他的东西,所有库都将和Struts一起工作。这有一些或许是最流行的库的信息:

*AjaxParts标签库APT),APT之美在于它是完全开放的,就像Struts一样。不像其他AJAX库,APTJava-only的,因为它使用自定义标签库来工作。你简单的拖一个标签到页面上,给页面上的一个元素绑定一个AJAX事件,通过一个XML配置文件定义事件怎样工作,就这样简单。不需要写任何javascript代码。APT是强大的,包含了大多数最常用的AJAX功能。如果你需要更多的功能,APT是完全可扩展的,允许你作任何想做的事。Rick Reumann写了一篇非常好的关于怎样在struts中使用APT的文章:<v:shape id="_x0000_s1032" style="WIDTH: 8.25pt; HEIGHT: 8.25pt" o:button="t" href="http://www.learntechnology.net/struts-ajax-crud.do" alt="[WWW]" type="#_x0000_t75"> <v:imagedata o:href="http://wiki.apache.org/wiki/modern/img/moin-www.png" src="file:///C:\DOCUME~1\chenyong\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"></v:imagedata></v:shape>http://www.learntechnology.net/struts-ajax-crud.do (注意APT 通常被叫做 AjaxTags)

 *Java Web PartsJWP),APT外,JWP提供一些有趣的东西。一个是Commons Digesterjavascript实现,它不具备Commons Digester的所有功能,但是如果你从server端发送XML,它可能是值得考虑的。也要注意RequestHelpers类,它提供一些有用的功能,象getPostBody()可以字符串格式得到request body的内容(比如当你从client端发送XMLJSON格式数据的时候这是很不错的)。

* PrototypePrototype是一个非常有用的javascript库,它可以比java作更多的事。

* Dojo, Dojo正迅速成为最令人激动的的javascript库。类似Prototype,它不仅仅处理AJAX,而是更多的东西。它包含大量GUI部件、功能类去处理client端的持久存储,DOM操作函数、javascript集合实现,以及非常可靠的AJAX功能。

* DWRDWR是一个非常酷的库,它允许你从javascript中远程方法调用server上的对象,并且代码看起来就像用java中写的一样!它也可以和许多流行的框架集成,包括struts,JSF,Spring,Webwork以及其它。

* Scriptaculous, 这个库在你往页面上添加不同效果时特别好用,它也提供一些方便的javascript单元测试代码。

*AjaxTags, 注意这和前面提及的AjaxParts是不同的(尽管APT常也被叫做AjaxTags)。这个AjaxTags是另一个标签库,它提供更多的AJAX部件,它使你通过标签很容易的作许多AJAX类的事情。尽管听起来是相似的,但AjaxTagsAPT确实是非常不同。

更多信息见:http://wiki.apache.org/struts/AjaxStruts

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics