在前人的基础上更改的DWRProxy

修改的地方:

1.多个DWR同时调用不受限制

2.调用DWR的方法的参数不做限制,可以任意。

3.增加EXT常用的几个Reader的实现:Ext.data.XmlReader Ext.data.JsonReader Ext.data.DWRArrayReader

Js代码 复制代码
/*
 @author:Condy
 @createDate:2008-01-14
 Ext.data.DWRProxy(DWR的调用方法,调用方法的输入参数)
 example:
   1.use DWRJsonReader:
   var store=new Ext.data.Store({
		proxy:new Ext.data.DWRProxy(DWRCall.getComboJsonByObject,"condy",{name:'condy',address:'xxxx',age:26}),
		reader:new Ext.data.DWRJsonReader({
		 totalProperty: "results",    
    root: "rows",                
    id: "id"
		},new Ext.data.Record.create([
    	{name: 'text', mapping: 'name'},     
    	{name: 'value',mapping:'occupation'}                 
      ]))
	});
	 java code:
	 public String getComboJsonByObject(String param1,DWRObject dwrobject){
		System.out.println("param1:"+param1);
		System.out.println("DWRObject: name:"+dwrobject.getName()+" age:"+dwrobject.getAge());
		StringBuffer sb=new StringBuffer();
		sb.append("{ 'results': 2, 'rows': [");
		sb.append("{ 'id': 1, 'name': 'Bill', occupation: 'Gardener' },");
		sb.append("{ 'id': 2, 'name': 'Ben', occupation: 'Horticulturalist' } ]");
		sb.append("}");
		System.out.println(sb.toString());
		return sb.toString();
	}
	2. use DWRArrayReader:
	  var store=new Ext.data.Store({
		proxy:new Ext.data.DWRProxy(DWRCall.getComboArray,"condy"),
		reader:new Ext.data.DWRArrayReader({
		},new Ext.data.Record.create([
    	{name: 'text', mapping: 0},     
    	{name: 'value',mapping:1}                 
      ]))
	});
	 java code:
	 public String[][] getComboArray(String id){
		System.out.println("id:"+id);
		String[][] aaData={new String[]{"aaa","111"},new String[]{"bbb","222"}};
		
		return aaData;
	}
	
	3. use DWRXmlReader:
	store=new Ext.data.Store({
		proxy:new Ext.data.DWRProxy(DWRCall.getComboArray,"condy"),
		reader:new Ext.data.DWRArrayReader({
		},new Ext.data.Record.create([
    	{name: 'text', mapping: 0},     
    	{name: 'value',mapping:1}                 
      ]))
	});
	 java code:
	  public String getComboXml(String param1,String param2){
		System.out.println("param1:"+param1);
		System.out.println("param2:"+param2);
		StringBuffer sbxml=new StringBuffer();
		sbxml.append("<?xml version=\"1.0\" encoding=\"GBK\"?>\n");
		sbxml.append("<dataset>\n");
		sbxml.append("<results>2</results>\n");
		sbxml.append("<row>\n");
		sbxml.append("<id>1</id>\n");
		sbxml.append("<name>Bill</name>\n");
		sbxml.append("<occupation>Gardener</occupation>\n");
		sbxml.append("</row>\n");
		sbxml.append("<row>\n");
		sbxml.append("<id>2</id>\n");
		sbxml.append("<name>Condy</name>\n");
		sbxml.append("<occupation>Horticulturalist</occupation>\n");
		sbxml.append("</row>\n");
		sbxml.append("</dataset>\n");
		System.out.println(sbxml.toString());
		return sbxml.toString();
	}
 */

Ext.data.DWRProxy = function(dwrCall){
  Ext.data.DWRProxy.superclass.constructor.call(this);
  this.dwrCall = dwrCall;
  /** 传入多个输入参数的处理**/
   this.callParams = new Array();
  for( i=1;i<arguments.length;i++){
  	this.callParams.push(arguments[i]);
  }
};

Ext.extend(Ext.data.DWRProxy, Ext.data.DataProxy, {
  load : function(params, reader, callback, scope, arg) {
    if(this.fireEvent("beforeload", this, params) !== false) {
      var delegate = this.loadResponse.createDelegate(this, [reader, callback, scope, arg], 1);
      this.callParams.push(delegate);
      this.dwrCall.apply(this, this.callParams);
    } else {
      callback.call(scope || this, null, arg, false);
    }
  },

  loadResponse : function(dwrResult, reader, callback, scope, arg) {
    var result;
    try {
      result = reader.read(dwrResult);
    } catch(e) {
      this.fireEvent("loadexception", this, null, dwrResult, e);
      callback.call(scope, null, arg, false);
      return;
    }
    callback.call(scope, result, arg, true);
  }
});
  
/*
 *
 *DWR调用方法返回的格式json
 *参数调用格式与 Ext.data.JsonReader是一样的 请查看Ext的api文档
*/
Ext.data.DWRJsonReader=function(meta,recordType){   
  Ext.data.DWRJsonReader.superclass.constructor.call(this,meta,recordType);   
};   
  
Ext.extend(Ext.data.DWRJsonReader,Ext.data.JsonReader,{   
  read : function(response){
  	    if(typeof response == 'object')
  	      alert("object");
        var o = eval("("+response+")");
        if(!o) {
            throw {message: "JsonReader.read: Json object not found"};
        }
        if(o.metaData){
            delete this.ef;
            this.meta = o.metaData;
            this.recordType = Ext.data.Record.create(o.metaData.fields);
            this.onMetaChange(this.meta, this.recordType, o);
        }
        return this.readRecords(o);
    }  
});  

/*
 *返回数组格式:[[xxx,yyy],[aaaa],[bbbb]]
 *参数调用格式与 Ext.data.ArrayReader是一样的,请查看Ext的api文档
 */
Ext.data.DWRArrayReader=function(meta,recordType){   
  Ext.data.DWRArrayReader.superclass.constructor.call(this,meta,recordType);   
};   
  
Ext.extend(Ext.data.DWRArrayReader,Ext.data.ArrayReader,{   
  read : function(response){
        var o = response;
        if(!o) {
            throw {message: "JsonReader.read: Json object not found"};
        }
        if(o.metaData){
            delete this.ef;
            this.meta = o.metaData;
            this.recordType = Ext.data.Record.create(o.metaData.fields);
            this.onMetaChange(this.meta, this.recordType, o);
        }
        return this.readRecords(o);
    }  
});

/*
 *
 *DWR调用方法返回的格式XML
 *参数调用格式与 Ext.data.XmlReader是一样的 请查看Ext的api文档
*/
Ext.data.DWRXmlReader=function(meta,recordType){   
  Ext.data.DWRXmlReader.superclass.constructor.call(this,meta,recordType);   
};   
  
Ext.extend(Ext.data.DWRXmlReader,Ext.data.XmlReader,{   
  read : function(response){
        var doc;
        try{
        	if(Ext.isIE || Ext.isIE7){
        		doc=new ActiveXObject("Microsoft.XMLDOM");
        		doc.loadXML(response);
        	}else{
        		var oParser=new DOMParser();
        		doc=oParser.parseFromString(response,"text/xml");
        	}
        }catch(e){
        	alert(e);
        }
        if(!doc) {
            throw {message: "DWRXmlReader.read: XML Document not available"};
        }
        return this.readRecords(doc);
    }  
});

调用示例:

combo.html 代码

Js代码 复制代码
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=GBK">
  5. <linkrel="stylesheet"type="text/css"href="../js/extjs/resources/css/ext-all.css"/>
  6. <scripttype='text/javascript'src='/dwr/dwr/interface/DWRCall.js'></script>
  7. <scripttype='text/javascript'src='/dwr/dwr/engine.js'></script>
  8. <scripttype="text/javascript"src="../js/extjs/adapter/ext/ext-base.js"></script>
  9. <scripttype="text/javascript"src="../js/extjs/ext-all-debug.js"></script>
  10. <scripttype="text/javascript"src="../js/extjs/ext-lang-zh_CN.js"></script>
  11. <scripttype="text/javascript"src="../js/extjs/DWRProxy.js"></script>
  12. <scripttype="text/javascript"src="comboxTest.js"></script>
  13. <title>Combo对象学习</title>
  14. <scripttype="text/javascript">
  15. </script>
  16. </head>
  17. <body>
  18. <inputtype='button'οnclick='alert(Ext.get("local-states").getValue());'value='store.getCount())'>
  19. <div>
  20. <inputtype='text'id='local-states'></input>
  21. </div>
  22. </body>
  23. </html>

comboxTest.js代码:

Js代码 复制代码
  1. varstore;
  2. Ext.onReady(function(){
var data=[[ 'AL' , 'Alabama' ],[ 'AK' , 'Alaska' ]]; //DWRCall.getComboArray('1',function(data){alert(data[0][1]);}); /*varstore=newExt.data.SimpleStore({ fields:['text','value'], data:data }); */ /**CallcomboxData.jsp***/ /*store=newExt.data.Store({ url:'comboxData.jsp', reader:newExt.data.XmlReader({ id:'id', totalRecords:'results', record:'row' },[{name:'text',mapping:'name'},{name:'value',mapping:'occupation'}]) }); */ /* store=newExt.data.Store({ url:'comboxData.jsp', reader:newExt.data.JsonReader({ totalProperty:"results",//Thepropertywhichcontainsthetotaldatasetsize(optional) root:"rows",//ThepropertywhichcontainsanArrayofrowobjects id:"id" },newExt.data.Record.create([ {name:'text',mapping:'name'}, {name:'value',mapping:'occupation'} ])) }); */ /******callDWR********/ /* store=newExt.data.Store({ proxy:newExt.data.DWRProxy(DWRCall.getComboJsonByObject,"condy",{name:'condy',address:'xxxx',age:26}), reader:newExt.data.DWRJsonReader({ totalProperty:"results", root:"rows", id:"id" },newExt.data.Record.create([ {name:'text',mapping:'name'}, {name:'value',mapping:'occupation'} ])) }); */ /* store=newExt.data.Store({ proxy:newExt.data.DWRProxy(DWRCall.getComboArray,"condy"), reader:newExt.data.DWRArrayReader({ },newExt.data.Record.create([ {name:'text',mapping:0}, {name:'value',mapping:1} ])) }); */ store= new Ext.data.Store({ proxy: new Ext.data.DWRProxy(DWRCall.getComboXml, "condy" , "test" ), reader: new Ext.data.DWRXmlReader({ id: 'id' , totalRecords: 'results' , record: 'row' },[{name: 'text' ,mapping: 'name' },{name: 'value' ,mapping: 'occupation' }]) }); var combo= new Ext.form.ComboBox({ store:store, typeAhead: true , displayField: 'text' , valueField: 'value' , mode: 'local' , triggerAction: 'all' , emptyText: 'Selectastate...' , selectOnFocus: true , applyTo: 'local-states' }); store.load({params:{}}); } );

java部分代码:

DWRCall.java

Java代码 复制代码

  1. packagecom.test;
  2. publicclassDWRCall{
  3. publicStringgetCombo(Stringid){
  4. System.out.println("bbbbbbbbbbbbbbbb");
  5. StringBuffersb=newStringBuffer();
  6. sb.append("[[").append("'condy','name'],['candy','name']]");
  7. System.out.println(sb.toString());
  8. returnsb.toString();
  9. }
  10. publicString[][]getComboArray(Stringid){
  11. System.out.println("id:"+id);
  12. String[][]aaData={newString[]{"aaa","111"},newString[]{"bbb","222"}};
  13. returnaaData;
  14. }
  15. publicStringgetComboJson(Stringparam1,Stringparam2){
  16. System.out.println("param1:"+param1);
  17. System.out.println("param2:"+param2);
  18. StringBuffersb=newStringBuffer();
  19. sb.append("{'results':2,'rows':[");
  20. sb.append("{'id':1,'name':'Bill',occupation:'Gardener'},");
  21. sb.append("{'id':2,'name':'Ben',occupation:'Horticulturalist'}]");
  22. sb.append("}");
  23. System.out.println(sb.toString());
  24. returnsb.toString();
  25. }
  26. publicStringgetComboXml(Stringparam1,Stringparam2){
  27. System.out.println("param1:"+param1);
  28. System.out.println("param2:"+param2);
  29. StringBuffersbxml=newStringBuffer();
  30. sbxml.append("<?xmlversion=\"1.0\"encoding=\"GBK\"?>\n");
  31. sbxml.append("<dataset>\n");
  32. sbxml.append("<results>2</results>\n");
  33. sbxml.append("<row>\n");
  34. sbxml.append("<id>1</id>\n");
  35. sbxml.append("<name>Bill</name>\n");
  36. sbxml.append("<occupation>Gardener</occupation>\n");
  37. sbxml.append("</row>\n");
  38. sbxml.append("<row>\n");
  39. sbxml.append("<id>2</id>\n");
  40. sbxml.append("<name>Condy</name>\n");
  41. sbxml.append("<occupation>Horticulturalist</occupation>\n");
  42. sbxml.append("</row>\n");
  43. sbxml.append("</dataset>\n");
  44. System.out.println(sbxml.toString());
  45. returnsbxml.toString();
  46. }
  47. publicStringgetComboJsonByObject(Stringparam1,DWRObjectdwrobject){
  48. System.out.println("param1:"+param1);
  49. System.out.println("DWRObject:name:"+dwrobject.getName()+"age:"+dwrobject.getAge());
  50. StringBuffersb=newStringBuffer();
  51. sb.append("{'results':2,'rows':[");
  52. sb.append("{'id':1,'name':'Bill',occupation:'Gardener'},");
  53. sb.append("{'id':2,'name':'Ben',occupation:'Horticulturalist'}]");
  54. sb.append("}");
  55. System.out.println(sb.toString());
  56. returnsb.toString();
  57. }
  58. }
package com.test;

public class DWRCall {

	public String getCombo(String id){
		System.out.println("bbbbbbbbbbbbbbbb");
		StringBuffer sb=new StringBuffer();
		sb.append("[[").append("'condy','name'],['candy','name']]");
		System.out.println(sb.toString());
		return sb.toString();
	}
	public String[][] getComboArray(String id){
		System.out.println("id:"+id);
		String[][] aaData={new String[]{"aaa","111"},new String[]{"bbb","222"}};
		
		return aaData;
	}
	public String getComboJson(String param1,String param2){
		System.out.println("param1:"+param1);
		System.out.println("param2:"+param2);
		StringBuffer sb=new StringBuffer();
		sb.append("{ 'results': 2, 'rows': [");
		sb.append("{ 'id': 1, 'name': 'Bill', occupation: 'Gardener' },");
		sb.append("{ 'id': 2, 'name': 'Ben', occupation: 'Horticulturalist' } ]");
		sb.append("}");
		System.out.println(sb.toString());
		return sb.toString();
	}
	
	public String getComboXml(String param1,String param2){
		System.out.println("param1:"+param1);
		System.out.println("param2:"+param2);
		StringBuffer sbxml=new StringBuffer();
		sbxml.append("<?xml version=\"1.0\" encoding=\"GBK\"?>\n");
		sbxml.append("<dataset>\n");
		sbxml.append("<results>2</results>\n");
		sbxml.append("<row>\n");
		sbxml.append("<id>1</id>\n");
		sbxml.append("<name>Bill</name>\n");
		sbxml.append("<occupation>Gardener</occupation>\n");
		sbxml.append("</row>\n");
		sbxml.append("<row>\n");
		sbxml.append("<id>2</id>\n");
		sbxml.append("<name>Condy</name>\n");
		sbxml.append("<occupation>Horticulturalist</occupation>\n");
		sbxml.append("</row>\n");
		sbxml.append("</dataset>\n");
		System.out.println(sbxml.toString());
		return sbxml.toString();
	}
	
	public String getComboJsonByObject(String param1,DWRObject dwrobject){
		System.out.println("param1:"+param1);
		System.out.println("DWRObject: name:"+dwrobject.getName()+" age:"+dwrobject.getAge());
		StringBuffer sb=new StringBuffer();
		sb.append("{ 'results': 2, 'rows': [");
		sb.append("{ 'id': 1, 'name': 'Bill', occupation: 'Gardener' },");
		sb.append("{ 'id': 2, 'name': 'Ben', occupation: 'Horticulturalist' } ]");
		sb.append("}");
		System.out.println(sb.toString());
		return sb.toString();
	}
}

DWRObject.java

Java代码 复制代码
  1. packagecom.test;
  2. publicclassDWRObject{
  3. privateStringname;
  4. privateStringaddress;
  5. privateintage;
  6. /**
  7. *@returntheaddress
  8. */
  9. publicStringgetAddress(){
  10. returnaddress;
  11. }
  12. /**
  13. *@paramaddresstheaddresstoset
  14. */
  15. publicvoidsetAddress(Stringaddress){
  16. this.address=address;
  17. }
  18. /**
  19. *@returntheage
  20. */
  21. publicintgetAge(){
  22. returnage;
  23. }
  24. /**
  25. *@paramagetheagetoset
  26. */
  27. publicvoidsetAge(intage){
  28. this.age=age;
  29. }
  30. /**
  31. *@returnthename
  32. */
  33. publicStringgetName(){
  34. returnname;
  35. }
  36. /**
  37. *@paramnamethenametoset
  38. */
  39. publicvoidsetName(Stringname){
  40. this.name=name;
  41. }
  42. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值