ExtJS+DWR+Spring+强强联姻

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

ExtJSDWRSpring强强联姻(转)关键字:EXT,DWR,Springexjsdwrspring强强联姻ExtJs在WebUI已经获得很大的殊荣,但单凭借它ClientUI还无法霸占BS那么丰富的应用。。他还要选择一个Web层与后台一起来交互完成一个完美的系统。Extjs的天生丽质的,完美了融合JQuery,Prototype,YUI,和她结合当然也需要出类拔萃,生出名门。如果采用Java为开发主语言,那么ExtJS+DWR+SPRING算是门当户对。可惜Extjs的DataStore的prxy并没有DWR一席,因为DWR返回的是Java对象与JSON非常像,然而DWR的在于它与Web远程Java方法的直接会话,因此有着非常灵活的一面。所以,有时候使用DWR对于J2EE来说,要更好于JSON,他做了JSON做不到事.extjs官方论坛里已经有人编写了这样的扩展,后经人丰富,现在基本能满足要求了。DWR扩展代码如下,创建Ext.data.DWRProxy类。同样也继承Ext.data.DataProxy,拿来show着解读一下。dwr.jsExt.data.DWRProxy=function(dwrCall,pagingAndSort){Ext.data.DWRProxy.superclass.constructor.call(this);this.dwrCall=dwrCall;//this.args=args;this.pagingAndSort=(pagingAndSort!=undefined?pagingAndSort:true);};Ext.extend(Ext.data.DWRProxy,Ext.data.DataProxy,{load:function(params,reader,callback,scope,arg){if(this.fireEvent(beforeload,this,params)!==false){varsort;if(params.sort&¶ms.dir)sort=params.sort+''+params.dir;elsesort='';vardelegate=this.loadResponse.createDelegate(this,[reader,callback,scope,arg],1);varcallParams=newArray();if(arg.arg){callParams=arg.arg.slice();}if(this.pagingAndSort){callParams.push(params.start);callParams.push(params.limit);callParams.push(sort);}callParams.push(delegate);this.dwrCall.apply(this,callParams);}else{callback.call(scope||this,null,arg,false);}},loadResponse:function(listRange,reader,callback,scope,arg){varresult;try{result=reader.read(listRange);}catch(e){this.fireEvent(loadexception,this,null,response,e);callback.call(scope,null,arg,false);return;}callback.call(scope,result,arg,true);},update:function(dataSet){},updateResponse:function(dataSet){}});Ext.data.ListRangeReader=function(meta,recordType){Ext.data.ListRangeReader.superclass.constructor.call(this,meta,recordType);this.recordType=recordType;};Ext.extend(Ext.data.ListRangeReader,Ext.data.DataReader,{getJsonAccessor:function(){varre=/[\[\.]/;returnfunction(expr){try{return(re.test(expr))?newFunction(obj,returnobj.+expr):function(obj){returnobj[expr];};}catch(e){}returnExt.emptyFn;};}(),read:function(o){varrecordType=this.recordType,fields=recordType.prototype.fields;//GenerateextractionfunctionsforthetotalProperty,theroot,theid,andforeachfieldif(!this.ef){if(this.meta.totalProperty){this.getTotal=this.getJsonAccessor(this.meta.totalProperty);}if(this.meta.successProperty){this.getSuccess=this.getJsonAccessor(this.meta.successProperty);}if(this.meta.id){varg=this.getJsonAccessor(this.meta.id);this.getId=function(rec){varr=g(rec);return(r===undefined||r===)?null:r;};}else{this.getId=function(){returnnull;};}this.ef=[];for(vari=0;ifields.length;i++){f=fields.items;varmap=(f.mapping!==undefined&&f.mapping!==null)?f.mapping:f.name;this.ef=this.getJsonAccessor(map);}}varrecords=[];varroot=o.data,c=root.length,totalRecords=c,success=true;if(this.meta.totalProperty){varv=parseInt(this.getTotal(o),10);if(!isNaN(v)){totalRecords=v;}}if(this.meta.successProperty){varv=this.getSuccess(o);if(v===false||v==='false'){success=false;}}for(vari=0;ic;i++){varn=root;varvalues={};varid=this.getId(n);for(varj=0;jfields.length;j++){f=fields.items[j];varv=this.ef[j](n);values[f.name]=f.convert((v!==undefined)?v:f.defaultValue);}varrecord=newrecordType(values,id);records=record;}return{success:success,records:records,totalRecords:totalRecords};}});经过改造之后,那么DWR可以像JSON一样,返回的数据作为DataStore代码片断ds=newExt.data.Store({proxy:newExt.data.DWRProxy(TodoService.getItems,true),//TotoService.getItemsdwr开放出来的Java获取数据方法reader:newExt.data.ListRangeReader({id:'id',totalProperty:'totalSize'},recordType),remoteSort:true});Spring实现了强大的管理了后台的JavaBean,干干净净的注入创建了每个对象,DWR天生又是支持Spring,无缝的讲Spring的后台Bean发布到Web层作为JavaScript对象,和JavaScript方法。中途不需要人工干预写Servlet.不多说了,跑了下代码,通过,可以直接下载。DownLoadtoext-dwr-spring.rar搜索更多相关主题的帖子:exjsdwrspringJSONDataProxy•16:22•浏览(1128)•评论(0)•分类:技术文摘2007-11-26缩略显示EXT2.0的新特性•Ext1.xto2.0升级指南•Ext2.0API参考•Ext2.0范例•Ext2.0ChangeLog(Comingsoon)•Ext社区论坛有关重大改变的几个要点文章内容是对2.0新变化的综合简述。请留意Ext框架在从1.x跨越到2.0的过程中,经历了无数的细微改进、臭虫修正和其他的改动。要逐一列出尚难为之,所以本文着重提及架构上有转换的主要地方,和一些全新加入的功能。本文下列的各部分将完整解释这每一项的细节。•组件模型ComponentModel在1.x中就有Component和BoxComponent两个类了,但却没有深入整合到框架中去。到2.0,这两个类得到极大的改进并是一切主要组件的基础。尽管这些类对于开发者而言一般是尽量隐藏细节的,不过打好组件生存周期的基础知识有利于下一步的Ext学习。参阅详细。•容器模型ContainerModel有几个核心类可用于器件(widgets)的构建和包含其它组件的布局。容器Container为可容纳对象和组件的布局提供一个基础性的构成方式,对于整个Ext框架可视化必不可少。面板Panel扩展自容器类,为用户程序提供特定功能的UI基类,而且可以说是容器结构层次中最常用的类。窗口Window是面板的一种特殊类型,使得web应用程序如桌面式(desktop-style)那样。视见区Viewport是专为全屏幕web程序应用而设计的实用容器。参阅详细•布局Layouts1.x中的布局方式围绕在BorderLayout和其相关的几个类。2.0,布局的整体架构建立在新容器类和崭新的布局类上。BorderLayout现加入到九种风格布局之中。布局类已经是全部重写设计并考虑最大的可扩展性。布局的管理亦受益于2.0的框架,去掉一些开发者之前需要面对的复杂实现。参阅详细•GridGrid组件往往都被认为是Ext的核心组件之一,在2.0的版本同时继续演进。新版的用户界面更友好,性能更佳,功能上新加了行摘要、行归组、和一些依靠插件实现的功能如expandablerows和rownumbering等等更多。参阅详细•模板XTemplate1.x的模版类处理一些简单的模版时令人放心,但对于高级的输出任务就缺乏关键的支持。在2.0中,全新的XTemplate可支持子模版,数组处理,直接代码执行,逻辑判断和更多有用的功能。参阅详细•数据视图DataView1.x的模版将数据绑定到模版以生成制定的UI视图。JsonView是快速绑定JSON数据辅助类。2.0的DataView把以上两种方式作统一的处理,不同的是它继承自BoxComponent,可更好地支持各种布局方式,新的XTemplate类为模版处理提供强大的支持。参阅详细•其它新组件这些新组件包括动作Action、CycleButton、Hidden(field)、ProgressBar和TimeField。参阅详细补充说

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功