- 浏览: 54613 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
roy_:
真心感谢,Junit下HttpSession不能注入的问题困扰 ...
SSH/SSI的TDD开发之实践 -
techno_it:
错了是:2.4.2版本。
Spring security2 未进行密码校验。 -
techno_it:
我用的是2.3.4.726版本。
Spring security2 未进行密码校验。 -
jackyrong:
请问你用的是sitemesh什么版本的呢?
Spring security2 未进行密码校验。 -
wkywahaha:
嗯 谢谢啊 我先看看视频了解下Struts2和Spring ...
SSH/SSI的TDD开发之实践
在Struts2.0中使用JSON结合DWR和EXT
如题,大家在Struts2.0中使用json是一般都选择了jsonplugin,我对jsonplugin不太熟悉,因此我选择了json-lib这个jar包。不知道jsonplugin对bean的支持是不是很好,还是只能对action进行序列化。好了现在说一下我的思路。
我先用Json-lib将我的bean进行序列化,当然此过程是放在了我的一个service中的。然后配置DWR公开service的接口。在EXT调用DWR的过程中可能会有些小麻烦,因为EXT官方的程序中没有支持DWR做数据源。在网上找到一个强人写的可做EXT数据源的DWRJS略加修改就成了我的DWRJSONJS,只是小小的改动了一下。下面贴一下布分代码。
这是我改过的JS:
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.readRecords(listRange.evalJSON());
- }
- 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[i];
- var map = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name;
- this.ef[i] = 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[i];
- 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[i] = record;
- }
- return{
- success : success,
- records : records,
- totalRecords : totalRecords
- };
- }
- }
- );
注:上面程序中的reader没有作用了。我用的是EXT中的JSONREADER。
下面是EXTGrid的代码:
js 代码
- <#macro ext name dwrclass dwrfunction>
- <script type=< span="">"text/javascript" src="<@s.url value='/pubjs/ext-dwr.js'/>"></script>
- <script type='text javascript' src="</span">"<@s.url value='/dwr/interface/${dwrclass}.js'/>"></script>
- <script type='text javascript' src="</span">"<@s.url value='/dwr/engine.js'/>"></script>
- <script type='text javascript' src="</span">"<@s.url value='/dwr/util.js'/>"></script>
- <script type=< span="">"text/javascript">
- var ds;
- var GridUI = function()
- {
- var grid; //component
- var columnModel; // definition of the columns
- if('${name}'=='userList')
- {
- function initDataSource()
- {
- ds = new Ext.data.Store({
- proxy: new Ext.data.DWRProxy(${dwrclass}.${dwrfunction}, true),
- reader: new Ext.data.JsonReader(
- <@s.property value="listDetail"/>),
- remoteSort: false
- });
- ds.on("load", function () {
- });
- }
- function getColumnModel()
- {
- if(!columnModel) {
- columnModel = new Ext.grid.ColumnModel(
- <@s.property value="listClounmModel"/>
- );
- columnModel.defaultSortable = true;
- }
- return columnModel;
- }
- }
- else if('${name}'=='roleList')
- {
- function initDataSource()
- {
- ds = new Ext.data.Store({
- proxy: new Ext.data.DWRProxy(${dwrclass}.${dwrfunction}, true),
- reader: new Ext.data.JsonReader(
- <@s.property value="roleDetail"/>),
- remoteSort: false
- });
- ds.on("load", function () {
- });
- }
- function getColumnModel()
- {
- if(!columnModel) {
- columnModel = new Ext.grid.ColumnModel(
- <@s.property value="roleClounmModel"/>
- );
- columnModel.defaultSortable = true;
- }
- return columnModel;
- }
- }
- else if('${name}'=='permList')
- {
- function initDataSource()
- {
- ds = new Ext.data.Store({
- proxy: new Ext.data.DWRProxy(${dwrclass}.${dwrfunction}, true),
- reader: new Ext.data.JsonReader(
- <@s.property value="PermissionDetail"/>),
- remoteSort: false
- });
- ds.on("load", function () {
- });
- }
- function getColumnModel()
- {
- if(!columnModel) {
- columnModel = new Ext.grid.ColumnModel(
- <@s.property value="PermissionClounmModel"/>
- );
- columnModel.defaultSortable = true;
- }
- return columnModel;
- }
- }
- function buildGrid()
- {
- grid = new Ext.grid.Grid(
- '${name}',
- {
- ds: ds,
- cm: getColumnModel(),
- autoSizeColumns: true,
- selModel: new Ext.grid.RowSelectionModel({singleSelect:true}),
- loadMask: true
- }
- );
- grid.render();
- grid.getSelectionModel().selectFirstRow();
- //鍙抽敭鑿滃崟
- grid.addListener('rowcontextmenu', contextmenu);
- var gridFoot = grid.getView().getFooterPanel(true);
- var paging = new Ext.PagingToolbar
- (
- gridFoot,
- ds,
- {
- pageSize:<@s.property value="perPageCount"/>,
- displayInfo:true,
- beforePageText:'<@s.text name="System.list.page"/>',
- afterPageText:'<@s.text name="System.list.pagedetails"/>',
- displayMsg: '<@s.text name="System.list.gridList"/>'
- }
- );
- /*paging.add
- (
- '_',
- {
- pressed: true,
- enableToggle:true,
- text: '<@s.text name="System.list.details"/>',
- cls: 'x-btn-text-icon details',
- toggleHandler: toggleDetails
- }
- );*/
- }
- function toggleDetails(btn, pressed)
- {
- if(pressed)
- {
- alert('Oh!Who hit me?');
- }
- }
- return{
- init : function() {
- initDataSource();
- ds.load({params:{start:0, limit:<@s.property value="perPageCount"/>}, callback:callme});
- buildGrid();
- },
- getStore: function() {
- return ds;
- }
- }
- }();
- function callme(tt)
- {
- }
- Ext.onReady(GridUI.init, GridUI, true);
- </script>
以下是业务程的代码。
java 代码
- public JSONObject getPageData(String queryString, int cpage, int pageSize,Serializable[] params) throws DFLogError
- {
- List results;
- JPage pageData = null;
- int total;
- Session s = this.getSession();
- try
- {
- Query query = this.getQuery(queryString, params, s);
- total = query.list().size();
- results = query.setFirstResult(cpage).setMaxResults(pageSize).list();
- pageData = new JPage(total, cpage);
- pageData.setData(results);
- return JSONObject.fromBean(pageData,StringUtils.commaDelimitedListToStringArray("roles,authorities"));
- }
- catch (HibernateException e)
- {
- log.error("Error in BaseDao.getPageData(String hql, int cpage, int pageSize)",e);
- throw new DFLogError("Error in BaseDao.getPageData(String hql, int cpage, int pageSize)",e);
- }
- finally
- {
- this.closeSession(s);
评论
3 楼
siyuan
2008-04-24
那么用到struts2了?
2 楼
popzwk
2008-03-31
1 楼
yangxuesong
2007-11-09
你好,想问下,ext的form要怎么提交给action呢?我做的数据可以提交上去,但是页面还是原来的页面,据说是要返回一个{success:true},请问是怎么操作的呢??
相关推荐
在这个实验代码中,可能包含了这些技术的集成与应用示例,例如如何配置SSH框架、如何使用DWR进行Ajax通信、如何在EXT3文件系统上部署应用、如何利用JSON进行数据交换以及如何设置和使用Ehcache。这些代码可以作为...
在IT行业中,SSH、EXT、JSON和DWR都是重要的技术和工具,它们在Web开发领域有着广泛的应用。这个名为“ssh+ext+json+dwr技术实现的动态树”的项目结合了这些技术,为我们提供了一个生动的示例,展示了如何在实际项目...
内含 ext+dwr+freemark+jasperreort+ireport+echance+oscache+velocite等技术 展示例子:http://zz563143188.iteye.com/blog/1462413 若要下载chm格式请到http://user.qzone.qq.com/563143188 程序源码下载地址10MB...
而今天我们要做的一个demo是一个简化的HRMS(人力资源管理系统),在SSH上因为Spring本身有自己的MVC框架实现,所以我们用它来代替struts,在Ajax上我们采用两大框架组件extjs和dwr,前者可以做出非常炫目的页面效果,...
JSON的优势在于它的结构与JavaScript对象相似,可以直接在JavaScript中使用,减少了数据处理的复杂性。 3. **Struts2**: Struts2 是一个基于MVC设计模式的Java Web应用框架。它提供了一种处理HTTP请求、控制业务...
7. **Ajax集成**:探讨如何利用Ajax技术增强用户体验,如使用DWR(Direct Web Remoting)和JSON与Struts的结合。 8. **异常处理**:讲述如何在Struts中有效地捕获和处理异常,提供统一的错误页面和反馈机制。 9. *...
在描述中提到,这种整合可以替代原本使用Extjs与Dwr(Direct Web Remoting)的组合,Dwr通常用于实时双向通信,但在某些场景下,Struts2可能更适合处理数据提供任务。 整合的过程主要涉及以下几个步骤: 1. **定义...
项目配置:Hibernate3.3.2+Spring3.0+Struts2.2.3 + ext3.4.0,真实项目实现,项目中可参考经典权限设计,通用数据录入,批量数据处理(poi),统一的JSON格式封装,灵活的组合模式设计,EXTJS面向组件编程参考......
- **Spring MVC实例**:结合JSON和Linechart展示了Spring MVC在实际应用中的数据展示和图表绘制,对于Web应用的前端展现有很好的参考价值。 - **SSH代码生成工具**:这两部分介绍了可以自动生成SSH框架下各层代码...
DWR 与 Spring 和 Struts 等其他 Java 框架集成良好,可以快速构建高性能的 Web 应用程序。此外,DWR 还支持 JSON 数据格式,便于前后端之间的数据交换。 ### 6. Buffalo Buffalo 是一种新型的 Ajax 框架,它通过在...
DWR用于提供异步更新,Ext是一个JavaScript库,JSON则是数据交换格式。 - SSI整合:Struts2、Spring和Ibatis的集成,Ibatis是一个轻量级的ORM框架,比Hibernate更灵活。 - 代码生成工具:在基于SSH的多层结构中,...
- **AJAX**: AJAX基础知识、JSON技术、常用框架(JQuery、DWR、EXT)。 - **全真实战项目**: 腾科BBS系统、装饰师设计平台、邮件客户端系统。 #### 四、JavaEE框架企业级应用开发 - **Struts2**: - MVC模式介绍及...