欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

AjaxStruts(在Struts中使用Ajax简介) AjaxStrutsjsonJavaScriptF# 

程序员文章站 2022-05-31 13:04:17
...

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怎样工作:

AjaxStruts(在Struts中使用Ajax简介)
            
    
    
        AjaxStrutsjsonJavaScriptF# 

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

 

AjaxStruts(在Struts中使用Ajax简介)
            
    
    
        AjaxStrutsjsonJavaScriptF# 

传统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