- 浏览: 821925 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (488)
- struts1 (4)
- spring (13)
- extjs (36)
- mysql (3)
- sqlserver (2)
- oracle (37)
- 杂谈 (11)
- 面试相关 (35)
- Java基础知识总结 (5)
- Java重要知识点 线程和io流知识点 (6)
- 服务器相关 (1)
- 生活 (1)
- jsp (7)
- servlet (2)
- junit (3)
- struts2 (9)
- 开发必备 (4)
- 使用开发工具总结的知识 (4)
- ibatis (12)
- ajax (2)
- dwr (2)
- jquery (1)
- 设计模式 (4)
- Lucene的学习 (5)
- 经验总结 (19)
- mysql全文搜索相关 (7)
- hibernate (33)
- Sphinx (1)
- log4j的总结 (1)
- 敏捷开发 (9)
- 持续集成 (15)
- UML使用总结 (1)
- Scrum (1)
- OO(面向对象编程) (1)
- struts1和struts2总结 (1)
- 数据库加密 (1)
- 多线程和Socket编程 (6)
- PowerDesigner (2)
- 权限相关 (1)
- ant应用总结 (4)
- 面试必知知识点总结 (6)
- io流与nio流总结 面试相关 (1)
- 敏捷管理工具的使用 (7)
- hsqldb相关 (1)
- svn源码相关 (2)
- debug调试技巧总结 (1)
- hibernate和ibatis对比相关 (6)
- eclipse mylyn 插件的使用总结 (2)
- fisheye使用总结 (2)
- java泛型总结 (1)
- ssh整合总结 (10)
- SpringSide的学习总结 (1)
- JPA学习总结 (2)
- RoR 总结 (2)
- 模型驱动 总结 (1)
- Oracle SQL优化技巧 (4)
- 数据库相关资料 (1)
- oracle练习相关 (4)
- PowerDesigner 使用总结 (2)
- Struts实现国际化相关 (2)
- 权限框架 Spring Security (1)
- freemarker使用总结 (1)
- jsp servlet总结相关 (3)
- Java NIO总结 (1)
- 自己学习必须 (3)
- 蝴蝶容器相关 (2)
- eclipse插件的使用 (1)
- myeclipse的使用 (1)
- flex相关 (1)
- javaeye重生后总结的知识点 (2)
- 公司学习总结 (3)
- JAXB 相关 (1)
- ECSide (1)
- EdoJs 企业ajax框架 (1)
- RSA加密算法 (1)
- jbpm相关 (1)
- JMF原理 (1)
- MyEclipse使用总结 (1)
- Funsion Charts 相关总结 (3)
- 常用知识2011 (2)
- Flex与Java整合 (1)
- IBM WebSphere相关 (1)
- jQuery使用技巧 (2)
- 2011年面试相关知识点总结 (2)
- sqlserver开发相关 (8)
- eclipse 打jar相关 (2)
- Oracle/Mysql/SqlServer比较 (1)
- WebService Axis1.4开发相关 (4)
- 进制数的转换 总结 (1)
- WebService Axis2.0开发相关 (0)
- iteye Struts2 Spring Hibernate整合相关 (3)
- iteye osgi资料相关总结 (1)
- iteye ifos相关相关 (1)
- iteye 国际化相关 (1)
- iteye Hibernate缓存机制 (4)
- iteye Struts2 总结 (1)
- iteye Struts标签总结 (0)
- iteye web配置文件大全 (6)
- iteye Efs 框架总结 (1)
- iteye sql优化 (2)
- iteye 大数据量高并发的数据库优化 (1)
- iteye 开发相关 (1)
- iteye s1sh 和 s2sh整合中的问题以及解决 (1)
- iteye s1sh整合实例 (1)
- iteye s2sh整合实例 (1)
- iteye 面试相关 基础篇 (1)
- iteye Android相关 (1)
- iteye 面试相关 Web篇 (1)
- iteye Sql Server相关 (0)
- iteye struts1与struts2比较 (1)
- iteye jquery 和Struts2 (0)
- iteye struts2与其他插件整合 (0)
- iteye jquery 开发相关 (1)
- iteye eclipse结合spket(Ext,Jquery)开发相关 (0)
- iteye myeclipse 使用技巧相关 (0)
- iteye Memcached 缓存系统相关 (0)
- iteye 常用软件相关 (0)
- iteye 最新技术预览 AjaxSwing (0)
- iteye struts上传下载相关 (0)
- iteye 新技术相关 (0)
- test (0)
- iteye 开发Java游戏相关 (0)
- iteye Java反编译 (0)
- iteye XML解析相关 (0)
- iteye 压缩ZIP相关 (0)
- iteye 面试相关 (0)
- iteye Android开发相关 (4)
- csdn (0)
- e-inoc (0)
- iteye http错误码对应说明 (0)
- iteye 面试扩展知识点 (0)
- iteye oracle面试相关 存储过程,触发器,游标等 (0)
- iteye english study (0)
- iteye starflow工作流引擎 (0)
- iteye IBM WebSphere Application Server Toolkit使用相关 (0)
- iteye spring3 (0)
- iteye mybatis (0)
- iteye js技巧总结 (0)
- iteye SEO优化相关 (2)
- iteye QUI网页界面集成框架 (1)
- iteye AjaxAnywhere (1)
- iteye Nutz相关 (1)
- iteye ibatis技巧 (0)
- iteye dwz (0)
- 128个ajax/javascript框架 (0)
- iteye 2012 Java Swing教程 (1)
- iteye 码头集装箱相关 (1)
- iteye swing (2)
- 兼职工作 (0)
- 2012 新总结的面试相关知识点 常用知识点 (1)
- 淘宝网店相关 (0)
- oracle 常用函数 2012新总结 (1)
- 我的时尚潮流屋 (0)
- 2012 年 面试新总结知识 (1)
- 技巧 (1)
- 2013总结 (1)
- 2015工作相关 (3)
- springmvc (5)
- EasyPR-Java (1)
- java (2)
- editplus 4.0 注册码 (1)
- android (1)
- oracle连接数据库相关 (1)
- 编程资料总结 (2)
- 20160808 (1)
- visio 2013 (1)
最新评论
-
drew926:
泛型的类型参数可以有多个?这是java哪个版本支持的?
java泛型总结 -
listenan:
赞!非常感谢。
Scrum总结 -
cwscwj:
写的很深刻,谢谢,看了一遍,过段时间打算再看一遍。
Scrum总结 -
hwedwin:
w
Struts 2中的OGNL\EL的使用总结 -
lanni2460:
不错 很好 支持……
sqlserver三个驱动包下载
在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 代码
注:上面程序中的reader没有作用了。我用的是EXT中的JSONREADER。
下面是EXTGrid的代码:
js 代码
以下是业务程的代码。
java 代码
如题,大家在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 代码
1. Ext.data.DWRProxy = function(dwrCall, pagingAndSort) 2. { 3. Ext.data.DWRProxy.superclass.constructor.call(this); 4. this.dwrCall = dwrCall; 5. //this.args = args; 6. this.pagingAndSort = (pagingAndSort!=undefined ? pagingAndSort : true); 7. }; 8. 9. Ext.extend 10. ( 11. Ext.data.DWRProxy, 12. Ext.data.DataProxy, 13. { 14. load : function(params, reader, callback, scope, arg) 15. { 16. if(this.fireEvent("beforeload", this, params) !== false) 17. { 18. var sort; 19. 20. if(params.sort && params.dir) 21. sort = params.sort + ' ' + params.dir; 22. else 23. sort = ''; 24. 25. var delegate = this.loadResponse.createDelegate(this, [reader, callback, scope, arg], 1); 26. var callParams = new Array(); 27. 28. if(arg.arg) 29. { 30. callParams = arg.arg.slice(); 31. } 32. 33. if(this.pagingAndSort) 34. { 35. callParams.push(params.start); 36. callParams.push(params.limit); 37. callParams.push(sort); 38. } 39. 40. callParams.push(delegate); 41. this.dwrCall.apply(this, callParams); 42. } 43. else 44. { 45. callback.call(scope || this, null, arg, false); 46. } 47. }, 48. 49. loadResponse : function(listRange, reader, callback, scope, arg) 50. { 51. var result; 52. try 53. { 54. result = reader.readRecords(listRange.evalJSON()); 55. } 56. catch(e) 57. { 58. this.fireEvent("loadexception", this, null, response, e); 59. callback.call(scope, null, arg, false); 60. return; 61. } 62. callback.call(scope, result, arg, true); 63. }, 64. 65. update : function(dataSet){}, 66. 67. updateResponse : function(dataSet) 68. {} 69. } 70. ); 71. 72. Ext.data.ListRangeReader = function(meta, recordType) 73. { 74. Ext.data.ListRangeReader.superclass.constructor.call(this, meta, recordType); 75. this.recordType = recordType; 76. }; 77. Ext.extend 78. ( 79. Ext.data.ListRangeReader, 80. Ext.data.DataReader, 81. { 82. getJsonAccessor: function() 83. { 84. var re = /[[.]/; 85. return function(expr) 86. { 87. try 88. { 89. return(re.test(expr))? new Function("obj", "return obj." + expr): function(obj){return obj[expr];}; 90. } 91. catch(e) 92. {} 93. return Ext.emptyFn; 94. }; 95. }(), 96. 97. read : function(o) 98. { 99. var recordType = this.recordType, fields = recordType.prototype.fields; 100. //Generate extraction functions for the totalProperty, the root, the id, and for each field 101. if (!this.ef) 102. { 103. if(this.meta.totalProperty) 104. { 105. this.getTotal = this.getJsonAccessor(this.meta.totalProperty); 106. } 107. 108. if(this.meta.successProperty) 109. { 110. this.getSuccess = this.getJsonAccessor(this.meta.successProperty); 111. } 112. 113. if (this.meta.id) 114. { 115. var g = this.getJsonAccessor(this.meta.id); 116. this.getId = function(rec) 117. { 118. var r = g(rec); 119. return (r === undefined || r === "") ? null : r; 120. }; 121. } 122. else 123. { 124. this.getId = function(){return null;}; 125. } 126. this.ef = []; 127. for(var i = 0; i < fields.length; i++) 128. { 129. f = fields.items[i]; 130. var map = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name; 131. this.ef[i] = this.getJsonAccessor(map); 132. } 133. } 134. var records = []; 135. var root = o.data, c = root.length, totalRecords = c, success = true; 136. 137. if(this.meta.totalProperty) 138. { 139. var v = parseInt(this.getTotal(o), 10); 140. if(!isNaN(v)) 141. { 142. totalRecords = v; 143. } 144. } 145. 146. if(this.meta.successProperty) 147. { 148. var v = this.getSuccess(o); 149. if(v === false || v === 'false') 150. { 151. success = false; 152. } 153. } 154. 155. for(var i = 0; i < c; i++) 156. { 157. var n = root[i]; 158. var values = {}; 159. var id = this.getId(n); 160. for(var j = 0; j < fields.length; j++) 161. { 162. f = fields.items[j]; 163. var v = this.ef[j](n); 164. values[f.name] = f.convert((v !== undefined) ? v : f.defaultValue); 165. } 166. var record = new recordType(values, id); 167. records[i] = record; 168. } 169. 170. return{ 171. success : success, 172. records : records, 173. totalRecords : totalRecords 174. }; 175. } 176. } 177. );
注:上面程序中的reader没有作用了。我用的是EXT中的JSONREADER。
下面是EXTGrid的代码:
js 代码
1. <#macro ext name dwrclass dwrfunction> 2. "text/javascript" src="<@s.url value='/pubjs/ext-dwr.js'/>"> 3. "<@s.url value='/dwr/interface/${dwrclass}.js'/>"> 4. "<@s.url value='/dwr/engine.js'/>"> 5. "<@s.url value='/dwr/util.js'/>"> 6. "text/javascript"> 7. 8. var ds; 9. var GridUI = function() 10. { 11. var grid; //component 12. var columnModel; // definition of the columns 13. if('${name}'=='userList') 14. { 15. function initDataSource() 16. { 17. ds = new Ext.data.Store({ 18. proxy: new Ext.data.DWRProxy(${dwrclass}.${dwrfunction}, true), 19. 20. reader: new Ext.data.JsonReader( 21. <@s.property value="listDetail"/>), 22. remoteSort: false 23. }); 24. 25. ds.on("load", function () { 26. }); 27. } 28. 29. function getColumnModel() 30. { 31. if(!columnModel) { 32. columnModel = new Ext.grid.ColumnModel( 33. <@s.property value="listClounmModel"/> 34. ); 35. columnModel.defaultSortable = true; 36. } 37. return columnModel; 38. } 39. } 40. else if('${name}'=='roleList') 41. { 42. function initDataSource() 43. { 44. ds = new Ext.data.Store({ 45. proxy: new Ext.data.DWRProxy(${dwrclass}.${dwrfunction}, true), 46. 47. reader: new Ext.data.JsonReader( 48. <@s.property value="roleDetail"/>), 49. remoteSort: false 50. }); 51. 52. ds.on("load", function () { 53. }); 54. } 55. 56. function getColumnModel() 57. { 58. if(!columnModel) { 59. columnModel = new Ext.grid.ColumnModel( 60. <@s.property value="roleClounmModel"/> 61. ); 62. columnModel.defaultSortable = true; 63. } 64. return columnModel; 65. } 66. } 67. else if('${name}'=='permList') 68. { 69. function initDataSource() 70. { 71. ds = new Ext.data.Store({ 72. proxy: new Ext.data.DWRProxy(${dwrclass}.${dwrfunction}, true), 73. 74. reader: new Ext.data.JsonReader( 75. <@s.property value="PermissionDetail"/>), 76. remoteSort: false 77. }); 78. 79. ds.on("load", function () { 80. }); 81. } 82. 83. function getColumnModel() 84. { 85. if(!columnModel) { 86. columnModel = new Ext.grid.ColumnModel( 87. <@s.property value="PermissionClounmModel"/> 88. ); 89. columnModel.defaultSortable = true; 90. } 91. return columnModel; 92. } 93. } 94. function buildGrid() 95. { 96. grid = new Ext.grid.Grid( 97. '${name}', 98. { 99. ds: ds, 100. cm: getColumnModel(), 101. autoSizeColumns: true, 102. selModel: new Ext.grid.RowSelectionModel({singleSelect:true}), 103. loadMask: true 104. } 105. ); 106. 107. 108. grid.render(); 109. grid.getSelectionModel().selectFirstRow(); 110. //鍙抽敭鑿滃崟 111. grid.addListener('rowcontextmenu', contextmenu); 112. var gridFoot = grid.getView().getFooterPanel(true); 113. var paging = new Ext.PagingToolbar 114. ( 115. gridFoot, 116. ds, 117. { 118. pageSize:<@s.property value="perPageCount"/>, 119. displayInfo:true, 120. beforePageText:'<@s.text name="System.list.page"/>', 121. afterPageText:'<@s.text name="System.list.pagedetails"/>', 122. displayMsg: '<@s.text name="System.list.gridList"/>' 123. } 124. ); 125. /*paging.add 126. ( 127. '_', 128. { 129. pressed: true, 130. enableToggle:true, 131. text: '<@s.text name="System.list.details"/>', 132. cls: 'x-btn-text-icon details', 133. toggleHandler: toggleDetails 134. } 135. );*/ 136. } 137. 138. function toggleDetails(btn, pressed) 139. { 140. if(pressed) 141. { 142. alert('Oh!Who hit me?'); 143. } 144. } 145. 146. return{ 147. init : function() { 148. initDataSource(); 149. ds.load({params:{start:0, limit:<@s.property value="perPageCount"/>}, callback:callme}); 150. buildGrid(); 151. }, 152. 153. getStore: function() { 154. return ds; 155. } 156. } 157. }(); 158. function callme(tt) 159. { 160. } 161. Ext.onReady(GridUI.init, GridUI, true); 162. 163.
以下是业务程的代码。
java 代码
1. public JSONObject getPageData(String queryString, int cpage, int pageSize,Serializable[] params) throws DFLogError 2. { 3. List results; 4. JPage pageData = null; 5. int total; 6. Session s = this.getSession(); 7. try 8. { 9. Query query = this.getQuery(queryString, params, s); 10. total = query.list().size(); 11. results = query.setFirstResult(cpage).setMaxResults(pageSize).list(); 12. pageData = new JPage(total, cpage); 13. pageData.setData(results); 14. return JSONObject.fromBean(pageData,StringUtils.commaDelimitedListToStringArray("roles,authorities")); 15. } 16. catch (HibernateException e) 17. { 18. log.error("Error in BaseDao.getPageData(String hql, int cpage, int pageSize)",e); 19. throw new DFLogError("Error in BaseDao.getPageData(String hql, int cpage, int pageSize)",e); 20. } 21. finally 22. { 23. this.closeSession(s); }
发表评论
-
Ext 文档相关
2010-11-22 12:55 1067Ext 文档相关 -
Ext3.2中文API(最终完成版2010-10-25)
2010-11-15 10:25 1546Ext3.2中文API(最终完成版2010-10-25).CH ... -
Ext.data.Connection
2010-08-28 23:11 1087Ext.data.Connection Ext.data.C ... -
EXt tree 简单增、删、改、查
2010-08-26 17:43 1853EXt tree 简单增、删、改、查 js: E ... -
Extjs总结
2010-08-23 17:07 2193ExtJS是一个用javascript写的,主要用于创建前端用 ... -
搭建EXTJS和STRUTS2框架(ext和struts2简单实例)
2010-08-23 08:17 1099新建一个工程struts2工程teaweb(因为现在所做的项目 ... -
EditorGridPanel中ComboBox显示问题?
2010-08-19 23:52 1521function getConsumerUnit(value) ... -
ExtJS3.0之可编辑表格EditorGridPanel
2010-08-19 23:45 2057ExtJS3.0之可编辑表格EditorGridPanel ... -
div左图右文布局效果 收藏
2010-08-19 23:22 1500div左图右文布局效果 收藏 <!DOCTYPE htm ... -
Ext Js Grid 编辑 新增 删除 保存的一个小示例
2010-08-19 23:20 2346Ext Js Grid 编辑 新增 删除 保存的一个小示例 & ... -
xt中combobox在grid显示问题
2010-08-19 23:16 1294xt中combobox在grid显示问题 问题描述:我在ed ... -
Ext.grid.EditorGridPanel的使用、修改记录的获取及提交方法
2010-08-19 20:27 1815<HTML> <HEAD> &l ... -
在Ext中EditorGrid中datefield输入问题解决过程
2010-08-19 20:22 1790在Ext中EditorGrid中datefield输入问题解决 ... -
在extjs中,用GridPanel来显示数据
2010-08-19 17:44 1591在extjs中,用GridPanel来显示数据,需要用到Sto ... -
使用Ext实现拖拉功能
2010-08-19 14:24 1419<!DOCTYPE html PUBLIC &q ... -
深入浅出Ext JS:一个完整的EXT应用
2010-08-19 14:16 2353在本文中,我们将综合运用前面所学的知识,开发一个简单的学生信息 ... -
Ext.GridPanel 用法总结(一)—— Grid基本用法
2010-08-19 12:23 1732Ext.GridPanel 用法总结(一)—— Grid基本用 ... -
Ext.ux.grid.RowEditor的使用
2010-08-19 10:42 3791Ext.ux.grid.RowEditor的使用 RowEd ... -
ext+dwr完整的例子(包括树,增删改查等)
2010-08-14 21:14 1381ext+dwr完整的例子(包括树,增删改查等) 文章分类:We ... -
DWR与EXT整合
2010-08-14 21:01 1338据不完全统计,从事Ajax开发的Java程序员有一大半都使用D ...
相关推荐
在这个实验代码中,可能包含了这些技术的集成与应用示例,例如如何配置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模式介绍及...