修改的地方:
1.多个DWR同时调用不受限制
2.调用DWR的方法的参数不做限制,可以任意。
3.增加EXT常用的几个Reader的实现:Ext.data.XmlReader Ext.data.JsonReader Ext.data.DWRArrayReader
/* @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 代码
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=GBK">
- <link rel="stylesheet" type="text/css" href="../js/extjs/resources/css/ext-all.css" />
- <script type='text/javascript' src='/dwr/dwr/interface/DWRCall.js'></script>
- <script type='text/javascript' src='/dwr/dwr/engine.js'></script>
- <script type="text/javascript" src="../js/extjs/adapter/ext/ext-base.js"></script>
- <script type="text/javascript" src="../js/extjs/ext-all-debug.js"></script>
- <script type="text/javascript" src="../js/extjs/ext-lang-zh_CN.js"></script>
- <script type="text/javascript" src="../js/extjs/DWRProxy.js"></script>
- <script type="text/javascript" src="comboxTest.js"></script>
- <title>Combo对象学习</title>
- <script type="text/javascript">
- </script>
- </head>
- <body>
- <input type='button' οnclick='alert(Ext.get("local-states").getValue());' value='store.getCount())'>
- <div>
- <input type='text' id='local-states'></input>
- </div>
- </body>
- </html>
comboxTest.js代码:
- var store;
- Ext.onReady(function(){
- var data=[['AL', 'Alabama'],['AK', 'Alaska']];
- //DWRCall.getComboArray('1',function(data){alert(data[0][1]);});
- /*var store=new Ext.data.SimpleStore({
- fields:['text','value'],
- data:data
- });
- */
- /**Call comboxData.jsp***/
- /*store=new Ext.data.Store({
- url:'comboxData.jsp',
- reader:new Ext.data.XmlReader({
- id:'id',
- totalRecords:'results',
- record:'row'
- },[{name:'text',mapping:'name'},{name:'value',mapping:'occupation'}])
- });
- */
- /*
- store=new Ext.data.Store({
- url:'comboxData.jsp',
- reader:new Ext.data.JsonReader({
- totalProperty: "results", // The property which contains the total dataset size (optional)
- root: "rows", // The property which contains an Array of row objects
- id: "id"
- },new Ext.data.Record.create([
- {name: 'text', mapping: 'name'},
- {name: 'value',mapping:'occupation'}
- ]))
- });
- */
- /****** call DWR ********/
- /*
- 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'}
- ]))
- });
- */
- /*
- 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}
- ]))
- });
- */
- 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:'Select a state...',
- selectOnFocus:true,
- applyTo: 'local-states'
- });
- store.load({params:{}});
- }
- );
java部分代码:
DWRCall.java
- 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();
- }
- }
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
- package com.test;
- public class DWRObject {
- private String name;
- private String address;
- private int age;
- /**
- * @return the address
- */
- public String getAddress() {
- return address;
- }
- /**
- * @param address the address to set
- */
- public void setAddress(String address) {
- this.address = address;
- }
- /**
- * @return the age
- */
- public int getAge() {
- return age;
- }
- /**
- * @param age the age to set
- */
- public void setAge(int age) {
- this.age = age;
- }
- /**
- * @return the name
- */
- public String getName() {
- return name;
- }
- /**
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
- }