当前位置: 首页 > 编程日记 > 正文

Ext结合DWR的关键代码(运行成功的DWRProxy)

关键代码如下:

Store为:
  1. var ds = new Ext.data.Store({
  2. proxy: new Ext.data.DWRProxy({
  3. callback: Folder.getMessageList,
  4. params: {
  5. start: '0',
  6. limit: PAGE_SIZE
  7. }
  8. }),
  9. //    proxy: new Ext.data.MemoryProxy(messageList),
  10. reader: new Ext.data.ObjectReader({
  11. root: 'messages',
  12. totalProperty: 'total'//用来让Ext的PagingToolbar组件分析总页数
  13. }, [{
  14. name: 'messageId'
  15. }, {
  16. name: 'from'
  17. }, {
  18. name: 'subject'
  19. }, {
  20. name: 'sendTime'
  21. }, {
  22. name: 'contentText'
  23. }])
  24. });
  25. //在进行DWR请求之前,默认在请求参数中添加当前文件夹ID。这样DWR请求中包括的请求参数为:folderId,start,limit
  26. ds.on('beforeload'function(){
  27. Ext.apply(this.baseParams, {
  28. folderId: currentFolderId
  29. });
  30. });
  31. ds.load({
  32. params: {
  33. start: currentStart,
  34. limit: currentLimit
  35. }
  36. });//指定起始位置以及个数
自定义的DWRProxy和ObjectReader:
  1. Ext.data.DWRProxy = function(config){
  2. Ext.data.DWRProxy.superclass.constructor.call(this);
  3. Ext.apply(this, config ||
  4. {});
  5. };
  6. 7Ext.extend(Ext.data.DWRProxy, Ext.data.DataProxy, {
  7. //DWR请求
  8. load: function(params, reader, callback, scope, arg){
  9. currentStart = params.start;//保存当前页记录起始位置
  10. currentLimit = params.limit;//保存当前页记录的个数
  11. document.dwr = {
  12. params: params,
  13. reader: reader,
  14. callback: callback,
  15. scope: scope,
  16. arg: arg
  17. };
  18. //处理请求参数,将各个请求参数转换到Array中
  19. var callParams = new Array();
  20. callParams.push(params.folderId);//当前文件夹ID
  21. callParams.push(params.start);//请求的起始位置
  22. callParams.push(params.limit);//请求的个数
  23. if (this.params !== undefined && this.params !== null) {
  24. this.callback.call(this, callParams, this.loadResponse);//DWR请求
  25. }
  26. else {
  27. this.callback.call(thisthis.loadResponse);
  28. }
  29. },
  30. //处理DWR返回
  31. loadResponse: function(response){
  32. var dwr = document.dwr;
  33. try {
  34. //IE throws an exception 'Error: TypeError, Object does not support this operation'   
  35. //so use trycatch to suppress this exception   
  36. delete document.dwr;//ie不支持delete
  37. }
  38. catch (e) {
  39. }
  40. var result;
  41. try {
  42. result = dwr.reader.read(response);//读取请求返回的json
  43. }
  44. catch (e) {
  45. //this.fireEvent("loadexception",this,dwr,response,e);   
  46. dwr.callback.call(dwr.scope, null, dwr.arg, false);
  47. return;
  48. }
  49. dwr.callback.call(dwr.scope, result, dwr.arg, true);
  50. },
  51. failure: function(errorString, exception){
  52. console.log("DWR " + exception);
  53. },
  54. update: function(params, records){
  55. }
  56. });
  57. //自定义一个用于处理返回消息列表的Reader
  58. Ext.data.ObjectReader = function(meta, recordType){
  59. Ext.data.ObjectReader.superclass.constructor.call(this, meta, recordType);
  60. };
  61. Ext.extend(Ext.data.ObjectReader, Ext.data.DataReader, {
  62. //处理DWR返回
  63. read: function(response){
  64. var responseDecode = Ext.util.JSON.decode(response);//注意,由java的json-lib生成的json串需要解码一下
  65. var data = responseDecode.messages;
  66. var sid = this.meta ? this.meta.id : null;
  67. var recordType = this.recordType, fields = recordType.prototype.fields;
  68. var records = [];
  69. var root = data;
  70. for (var i = 0; i < root.length; i++) {
  71. var obj = root[i];
  72. var values = {};
  73. var id = obj[sid];
  74. for (var j = 0, jlen = fields.length; j < jlen; j++) {
  75. var f = fields.items[j];
  76. var k = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name;
  77. var v = null;
  78. var idx = k.indexOf(".");
  79. if (idx == -1) {
  80. v = obj[k] !== undefined ? obj[k] : f.defaultValue;
  81. }
  82. else {
  83. var k1 = k.substr(0, idx);
  84. var k2 = k.substr(idx + 1);
  85. if (obj[k1] == undefined) {
  86. v = f.defaultValue;
  87. }
  88. else {
  89. var obj2 = obj[k1];
  90. v = obj2[k2] !== undefined ? obj2[k2] : f.defaultValue;
  91. }
  92. }
  93. v = f.convert(v);
  94. values[f.name] = v;
  95. }
  96. var record = new recordType(values, id);
  97. records[records.length] = record;
  98. }
  99. return {
  100. records: records,//返回的消息列表记录
  101. totalRecords: responseDecode.total//总个数
  102. };
  103. }
  104. });

转载于:https://www.cnblogs.com/China-Dragon/archive/2010/05/07/1730156.html

相关文章:

serlvet 九大内置对象

隐式对象 说明 request 转译后对应HttpServletRequest/ServletRequest对象 response 转译后对应HttpServletRespons/ServletResponse对象 session 转译后对应HttpSession对象 application 转译后对应ServletContext对象 out 转译后对应JspWriter对象&#xff0c;其…

网路游侠:某软件版WEB应用防火墙试用

去年的这个时候&#xff0c;游侠(www.youxia.org)认为WAF都是硬件的&#xff0c;后来在网上看到这个在国内做的不错的牌子。居然是软件的WAF&#xff0c;这样的话&#xff0c;一些服务器在机房托管的用户就特别需要这样的产品&#xff0c;因为1U的设备在电信机房的托管费用都有…

P2172 [国家集训队]部落战争 二分图最小不相交路径覆盖

二分图最小不相交路径覆盖 #include<bits/stdc.h> using namespace std; const int MAXN 5550; const int MAXM 1000005; const int INF 1000000050; int Head[MAXN], cur[MAXN], lev[MAXN], to[MAXM << 1], nxt[MAXM << 1], f[MAXM << 1], ed 1, …

IO流 字符流 字节流 缓冲流 文件的复制

IO流 IO概述 IO流就是一个管道&#xff0c;是用来在设备之间传输数据 input&#xff1a;相对于内存/程序 往进走输入流 output&#xff1a;相对于内存/程序 往硬盘写入 分类 根据数据进出方式 1、输出流&#xff1a; FileWriter 字符输出流BufferedWriter 字符缓冲输出…

强烈推荐:240多个jQuery插件

http://www.cnblogs.com/Terrylee/archive/2007/12/09/the-ultimate-jquery-plugin-list.html转载于:https://www.cnblogs.com/HughTan/archive/2010/05/14/1735376.html

FreeBSD Ports加速的方法

使用代理。 在/etc/make.conf中设置&#xff1a;FETCH_ENV "HTTP_PROXYIP[:端口]"如果需要&#xff0c;在FETCH_ENV值后面加入空格&#xff0c;HTTP_PROXY_AUTHbasic:*:user:password利用其他机器下载的文件... 首先&#xff0c;请确保2台机器cvsup的一致&#xff0…

AngularJS ng-if使用

示例中&#xff0c;根据ng-if指令显示不同任务状态&#xff0c;以及判断任务是否可以操作 <div ng-app"NgifDemoApp" ng-controller"NgifDemoContrl as vm"><h1>任务列表</h1><table class"table"><thead><tr&…

一、Tableau基础

有关函数的官方文档&#xff1a;https://onlinehelp.tableau.com/current/pro/desktop/zh-cn/functions_functions_string.htm 注意事项&#xff1a; 1.记录数:是Tableau自动给每行观测值赋值为1。 2.维度的字段&#xff0c;是不能用于计算的&#xff0c;若是要用于计算&#x…

关于OGNL表达式中的%,$,#

OGNL表达式非常强大&#xff5e;其中#、%、$这三个符号在OGNL表达式中经常出现&#xff0c;而这三种符号也是开发者不容易掌握和理解的部分&#xff0c;要认真区分。1&#xff0e;#符号的用途一般有三种。 1)访问非根对象属性&#xff0c;例如示例中的#session.msg表达式&#…

JavaWeb项目第三次总结_成绩查询的实现

查询图书的功能实现 如何知道浏览器往服务器传入的参数 1、在编写好查询页面后&#xff0c;使用火狐浏览器的friebug &#xff08;全部—>POST—>参数&#xff09; 2、编写GradeListServlet&#xff0c;重写doGet&#xff08;&#xff09;和doPOST&#xff08;&#x…

cisco路由交换系统测试命令

路由交换系统测试命令通用测试命令&#xff1a;ping X.X.X.X &#xff1a;标准ping命令&#xff0c;用于测试设备间的物理连通性ping &#xff1a;扩展ping命令&#xff0c;也用于设备间的物理连通性&#xff0c;扩展ping命令还支持灵活定义ping命令的参数&#xff0c;比…

jquery下拉菜单

自己写的一个菜单(因为是初学 不知道能不能算无限级)jquery $(document).ready(function(){ $("ul li").hover(function(){ $(this).find("ul:first").show();//鼠标滑过查找li下面的第一个ul然后显示&#xff1b;},function(){ …

MongoDB update修改器: 针对Fields的$修改器 $inc $set $unset

MongoDB update修改器: $inc $set $unset $push $pull $pop 针对Fields的$修改器 $set&#xff1a; { $set: { key: value } } $set:{"gender":"男"} 解释: $set 是update时的关键字,表示我要设置gender属性的值为"男" 如果该条Documents没有gen…

都是些什么人!

都是些什么人&#xff01;转载于:https://www.cnblogs.com/liyugeng/p/7877615.html

IO流(二)转换流、序列化、commons-IO框架

转换流 介于字符流和字节流之间的流 字节流与字节流相互转换 OutputStreamWriter 输出流&#xff0c;按照指定的字符集编码&#xff0c;把字符流转化成字节数据 编码&#xff1a;把字符数据转换成字节数据&#xff1b; 解码&#xff1a;把字节数据转换成字符数据 二进制数据—&…

Http之Get/Post请求区别

今天在网上看了一些关于http 协议中get 和Post的文章。在此做一个总结&#xff0c;当是做一个笔记吧。 一、什么是HTTP-GET和HTTP-POST HTTP-GET和HTTP-POST是使用HTTP的标准协议动词&#xff0c;用于编码和传送变量名/变量值对参数&#xff0c;并且使用相关的请求语义。每个HT…

[vb+mo] visual baisc 6.0 基于mapobjects 2.4 开发的数字化校园电子地图

程序的源代码下载地址: https://docs.google.com/ 请安装VB6.0企业版(不是企业版运行会报错,因为缺少相应的控件)和ESRI MO2.4 程序的质量一般,因为时间仓促,主要是毕业设计时间仓促.希望大家多多改进.有什么问题可以发邮件欢迎交流. 程序的主窗口代码: 通用变量定义Private l…

vsftp部署

1.安装该软件需要使用最高用户&#xff08;root&#xff09;进行安装&#xff0c;否则不能进行。 2.首先用命令检查VSFTP是否已经安装。chkconfig --list | grep vsftpd 3.安装vsftp。yum install –y vsftpd 4.启动vsftp。service vsftpd start 5.添加一个ftp用户。useradd f…

线程、线程匿名内部类、解决线程不安全的方式

线程 线程&#xff1a;正在运行的程序&#xff0c;是程序的执行路径&#xff1b;多线性 进程&#xff1a;是应用程序的载体&#xff0c;程序运行在虚拟机中。一个应用软件对应一个进程。 一个进程包含多个线程&#xff0c;一个线程对应一个进程。 好处&#xff1a;提高软件的运…

工作流编程循序渐进(9:使用本地服务在宿主和工作流之间通信)

工作流编程循序渐进&#xff08;9&#xff1a;使用本地服务在宿主和工作流之间通信&#xff09; 作者 朱先忠 &#xff3b;摘要&#xff3d;在本篇中&#xff0c;首先详细分析本地服务有关概念&#xff0c;探讨本地服务在工作流运行时、工作流实例及工作流宿主间的地位及作用…

使用Properties连接数据库

使用Properties连接数据库 要注意的是&#xff1a; 1.通过配置文件来连接数据库时&#xff0c;连接信息要以 mysql.XXX开头,否则会提示异常。 java.sql.SQLException: Access denied for user localhost (using password: YES)生成配置文件的实现代码 1、创建写入配置信息工…

两边横线,中间标题

<!DOCTYPE html> <html> <head> <title>两边横线&#xff0c;中间标题</title> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <style type"text/css"> <!--ul { mar…

交换机基础配置

请同学们下载附件中的实验并完成。转载于:https://blog.51cto.com/coffee0546/204093

python高级-模块(14)

一、python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt函数&#xff0c;必须用语句#include <math.h>引入math.h这个头文件&#xff0c;否则是无法正常进行调用的。 那么在Python中&#xff0c;如果要引用一些其他的函数&#xff0c;该怎么处理呢&am…

RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列

上一篇已经讲了Rabbitmq如何在Windows平台安装&#xff0c;不懂请移步&#xff1a;RabbitMQ学习系列一&#xff1a;windows下安装RabbitMQ服务 一、理论&#xff1a; .net环境下&#xff0c;C#代码调用RabbitMQ消息队列&#xff0c;本文用easynetq开源的.net Rabbitmq api来实…

一步步学会使用ASP.NET 4 WEB应用程序中使用URL Routing(翻译)

创建路由 路由就是将URL路径映射到具体的物理文件。若要将路由添加到网站中&#xff0c;请使用 RouteCollection.MapPageRoute 方法将它们添加到RouteTable类的静态Routes属性。 将用于添加路由的方法添加到 Global.asax 文件中 如果网站还没有 Global.asax 文件&#xff0c;…

Properties持久的属性集

Properties 属性集合继承了Hashtable 属性包括属性名和属性值&#xff08;键值对keyvalue&#xff09; 作用 可以存储多个键值&#xff0c;与map相似可以把键值对存储到文件中可以把文件中的键值对读取到Properties对象中 构造方法&#xff1a; Properties() 创建一个无默认…

让你二十年后仍是人才

1.不管坐什么位置&#xff0c;都要保持学习的习惯出社会工作十年到十五年左右&#xff0c;会有一种「上下卡住」的闭塞感与无力感。因为&#xff0c;这个阶段的上班族虽然拥有一定的资历与经验&#xff0c;工作也得心应手&#xff0c;但上面有比自己更资深的前辈压着&#xff0…

Django ORM操作

Django ORM操作 一般操作 看专业的官网文档&#xff0c;做专业的程序员&#xff01; 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条件相匹配的对象&#xff0c;返回结果有且只有一个&#xff0c;如果符合筛选…

ChineseCalendar类[转]

///<summary>///Title: ChineseCalendar类 ///Description: 中文日期工具类 ///author 万灵杰[作者] ///version 1.0.0.0 ///date 2009年7月30日 ///modify ///date ///</summary>publicclassChineseCalendar { privatestaticrea…