免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 848 | 回复: 0
打印 上一主题 下一主题

Ajax+Struts [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-29 16:51 |只看该作者 |倒序浏览

作者:struts开发组   翻译:
tianxinet(胖猴)
(本文介绍了ajax的基本工作原理,提供了一些在struts中及单独使用ajax的非常有用的资源。)
介绍
本文介绍怎样在struts中使用AJAX。
基础
作为开始,这里有一篇文章和一个相当有趣的web程序的例子,下面是链接(如果有兴趣可以看一下,或看完本文后去看,它有具体的struts+ajax的应用文章和示例。可以把本文当作引子):
http://www.omnytex.com/articles
这里的文章介绍了一些不错的关于使用XMLHttpRequest的信息,并且对web程序的例子作了一些解释。
这个web实例程序演示了XMLHttpRequest的6种不同用法,包括table的动态排序,动态更新一个元素,动态装载一个和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数据,你可能访问一个名叫json的javascript变量--从你能够得到的一段数据中,象这样:
var firstName = json.firstName;var lastName = json.lastName;
这很简单,尤其是在client端(解析XML是很小的开销)变得很流行。关于JSON的更多信息,包括大量很容易能解析和创建JSON的java类,见
http://www.json.org
但是,要点是如果request提交的东西是XML、JSON,或其它你自己创建的数据格式,那么你不得不在sever上解析并处理它,这意味着你不能使用Struts的所有能力,比如auto-population, validation等。

有几百种AJAX库,或是XMLHttpRequest之上的抽象层、或是AJAX-enabled的窗口部件或者其他的东西,所有库都将和Struts一起工作。这有一些或许是最流行的库的信息:
*AjaxParts标签库(APT),APT之美在于它是完全开放的,就像Struts一样。不像其他AJAX库,APT是Java-only的,因为它使用自定义标签库来工作。你简单的拖一个标签到页面上,给页面上的一个元素绑定一个AJAX事件,通过一个XML配置文件定义事件怎样工作,就这样简单。不需要写任何javascript代码。APT是强大的,包含了大多数最常用的AJAX功能。如果你需要更多的功能,APT是完全可扩展的,允许你作任何想做的事。Rick Reumann写了一篇非常好的关于怎样在struts中使用APT的文章:
http://www.learntechnology.net/struts-ajax-crud.do
(注意APT 通常被叫做 AjaxTags)
*Java Web Parts(JWP),除APT外,JWP提供一些有趣的东西。一个是Commons Digester的javascript实现,它不具备Commons Digester的所有功能,但是如果你从server端发送XML,它可能是值得考虑的。也要注意RequestHelpers类,它提供一些有用的功能,象getPostBody()可以字符串格式得到request body的内容(比如当你从client端发送XML或JSON格式数据的时候这是很不错的)。
* Prototype,Prototype是一个非常有用的javascript库,它可以比java作更多的事。
* Dojo, Dojo正迅速成为最令人激动的的javascript库。类似Prototype,它不仅仅处理AJAX,而是更多的东西。它包含大量GUI部件、功能类去处理client端的持久存储,DOM操作函数、javascript集合实现,以及非常可靠的AJAX功能。
* DWR,DWR是一个非常酷的库,它允许你从javascript中远程方法调用server上的对象,并且代码看起来就像用java中写的一样!它也可以和许多流行的框架集成,包括struts,JSF,Spring,Webwork以及其它。
* Scriptaculous, 这个库在你往页面上添加不同效果时特别好用,它也提供一些方便的javascript单元测试代码。
*AjaxTags, 注意这和前面提及的AjaxParts是不同的(尽管APT经常也被叫做AjaxTags)。这个AjaxTags是另一个标签库,它提供更多的AJAX部件,它使你通过标签很容易的作许多AJAX类的事情。尽管听起来是相似的,但AjaxTags和APT确实是非常不同。
更多信息见:
http://wiki.apache.org/struts/AjaxStruts


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/26845/showart_331112.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP