`
zyjwy02
  • 浏览: 141242 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ExtJS DWR Spring 强强联姻(转)

阅读更多

 

exjs dwr spring 强强联姻
ExtJs 在Web UI已经获得很大的殊荣,但单凭借它 Client UI 还无法霸占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.js

Ext.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) {
var sort;
if(params.sort && params.dir) sort = params.sort + ' ' + params.dir;
else sort = '';
var delegate = this.loadResponse.createDelegate(this, [reader, callback, scope, arg], 1);
var callParams = new Array();
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) {
var result;
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(){
var re = /[\[\.]/;
return function(expr) {
try {
return(re.test(expr))
? new Function("obj", "return obj." + expr)
: function(obj){
return obj[expr];
};
} catch(e){}
return Ext.emptyFn;
};
}(),

read : function(o){
var recordType = this.recordType, fields = recordType.prototype.fields;

//Generate extraction functions for the totalProperty, the root, the id, and for each field
if (!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) {
var g = this.getJsonAccessor(this.meta.id);
this.getId = function(rec) {
var r = g(rec);
return (r === undefined || r === "") ? null : r;
};
} else {
this.getId = function(){return null;};
}
this.ef = [];
for(var i = 0; i < fields.length; i++){
f = fields.items;
var map = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name;
this.ef = this.getJsonAccessor(map);
}
}

var records = [];
var root = o.data, c = root.length, totalRecords = c, success = true;

if(this.meta.totalProperty){
var v = parseInt(this.getTotal(o), 10);
if(!isNaN(v)){
totalRecords = v;
}
}

if(this.meta.successProperty){
var v = this.getSuccess(o);
if(v === false || v === 'false'){
success = false;
}
}

for(var i = 0; i < c; i++){
var n = root;
var values = {};
var id = this.getId(n);
for(var j = 0; j < fields.length; j++){
f = fields.items[j];
var v = this.ef[j](n);
values[f.name] = f.convert((v !== undefined) ? v : f.defaultValue);
}
var record = new recordType(values, id);
records = record;
}

return {
success : success,
records : records,
totalRecords : totalRecords
};
}
});



经过改造之后,那么DWR可以像JSON一样,返回的数据作为DataStore
代码片断

ds = new Ext.data.Store({
proxy: new Ext.data.DWRProxy(TodoService.getItems, true), //TotoService.getItems dwr开放出来的Java获取数据方法
reader: new Ext.data.ListRangeReader(
{id:'id', totalProperty:'totalSize'}, recordType),
remoteSort: true
});




Spring 实现了强大的管理了后台的JavaBean,干干净净的注入创建了每个对象, DWR天生又是支持Spring,无缝的讲Spring的后台Bean 发布到Web层作为JavaScript对象,和JavaScript方法。中途不需要人工干预写Servlet.



不多说了, 跑了下代码,通过,可以直接下载。DownLoad to ext-dwr-spring.rar
分享到:
评论
1 楼 wyyacyy 2008-12-11  
怎么不可以下载啊?
LZ

相关推荐

    文具申请系统 Extjs dwr spring 实现

    【文具申请系统 Extjs Dwr Spring 实现】 在IT领域,开发企业级应用程序时,通常需要使用到各种技术和框架来提高效率、增强用户体验并确保系统的可维护性。本项目"文具申请系统"就是一个这样的实例,它巧妙地融合了...

    extjs dwr hibernate spring

    extjs dwr hibernate spring 整合的树!

    extjs dwr spring

    标题 "extjs dwr spring" 涉及到的是三个重要的技术组件,它们分别是ExtJS、Direct Web Remoting (DWR) 和Spring框架。这些技术常用于构建现代、交互式的Web应用程序。 **ExtJS** 是一个JavaScript库,专门用于创建...

    DWR+extjs+spring+hibernate

    总结起来,"DWR+extjs+spring+hibernate"的组合是现代Web应用开发的一个强大工具集,它能够帮助开发者快速构建出交互性强、性能优异的企业级应用。通过深入理解和熟练掌握这四个技术,可以显著提升开发者的技能水平...

    基于 Extjs + spring + hibernate 的OA框架

    基于 Extjs + spring + hibernate 的OA框架 基于 Extjs + spring + hibernate 的OA框架 基于 Extjs + spring + hibernate 的OA框架

    ExtJs DWR扩展 DWRProxy、DWRTreeLoader、DWRGridProxy

    ExtJs和Direct Web Remoting (DWR) 是两种在Web应用程序中实现富客户端交互的技术。ExtJs是一个强大的JavaScript框架,用于构建用户界面,而DWR则是一个允许JavaScript直接调用服务器端Java方法的库,无需AJAX的...

    Spring ibatis dwr2 extjs 实例1

    本例子通过Spring容器管理ibatis dwr2的javaBean以及事务,Extjs通过dwr2来调用Spring管理类

    ExtJs+ Dwr 页面登入功能

    **标题:“ExtJs+ Dwr 页面登入功能”** 在网页应用开发中,用户登录功能是不可或缺的一部分,它确保了用户身份的安全验证和访问权限的控制。本项目将讲解如何使用ExtJs(一个强大的JavaScript框架)结合DWR...

    extjs_dwr整合例子

    ExtJS和Direct Web Remoting(DWR)是两种在Web开发中常见的技术,它们结合使用可以构建出交互性极强的富客户端应用。本压缩包文件"Extjs+Dwr"提供了一个整合ExtJS和DWR的例子,让我们来详细探讨一下这两个技术以及...

    ExtJS DWR 入门级代码 源代码

    NULL 博文链接:https://atgoingguoat.iteye.com/blog/620103

    Extjs + Spring MVC + hibernate + mysql

    标题 "Extjs + Spring MVC + hibernate + mysql" 涉及的是一个综合性的Web应用程序开发框架,结合了前端UI库、后端MVC框架、ORM工具和关系型数据库。让我们详细了解一下这些技术及其在实际项目中的应用。 1. ExtJS...

    Extjs--DWR做的动态树

    ExtJS 是一个流行的JavaScript库,用于构建富客户端的Web应用程序,而DWR(Direct Web Remoting)则是一种在客户端JavaScript和服务器端Java之间进行实时通信的技术。这篇博客文章"Extjs--DWR做的动态树"可能探讨了...

    ExtJS5 整合Spring4之二

    标题 "ExtJS5 整合Spring4之二" 暗示了这是一个关于将流行的JavaScript框架ExtJS5与Java后端框架Spring4集成的主题。在Web应用开发中,这种集成允许开发者利用ExtJS5的富客户端功能和Spring4的强大后端服务。下面将...

    extjs+spring+struts+hibernate

    **标题:“extjs+spring+struts+hibernate”** **描述:“extjs+spring+struts+hibernate整合实例”** 这个项目是一个综合性的Web应用开发框架整合示例,它结合了ExtJS(一个强大的JavaScript UI库),Spring(一...

    extjs+dwr3.0实现文件上传

    EXTJS和DWR(Direct Web Remoting)是两种在Web开发中用于构建用户界面和处理服务器端交互的技术。EXTJS是一种强大的JavaScript库,用于创建高度交互的、数据驱动的前端应用,而DWR则是一个开源框架,允许JavaScript...

    extjs+spring+jdbc

    ExtJS + Spring + JDBC 是一个常见的企业级应用开发架构,用于构建高效、功能丰富的管理后台。这个架构结合了三种技术的强项,提供了一个灵活、可扩展且数据驱动的前端与后端解决方案。 ExtJS 是一个强大的 ...

    ExtJs+Dwr(Grid)实现分页功能

    ExtJs+Dwr(Grid)实现分页功能,很实用

Global site tag (gtag.js) - Google Analytics