您的位置:首页 > 其它

在前人的基础上更改的DWRProxy

2008-12-22 15:25 197 查看
修改的地方:

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代码



<!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' onclick='alert(Ext.get("local-states").getValue());' value='store.getCount())'>

<div>

<input type='text' id='local-states'></input>

</div>

</body>

</html>

comboxTest.js代码:

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

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

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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: