在dwr.xml的<allow>標(biāo)簽中加入
<convert converter="bean" match="***一般來(lái)說(shuō)是javabean***"> //int,String,list等不需要顯式的轉(zhuǎn)換就可以被js拿到
<param name="include" value="***javabean中的屬性,用','隔開***" /> //這句可以不寫
</convert>
<creator>標(biāo)簽負(fù)責(zé)公開用于Web遠(yuǎn)程的類和類的方法,<convertor>標(biāo)簽則負(fù)責(zé)這些方法的參數(shù)和返回類型。convert元素的作用是告訴DWR在服務(wù)器端Java 對(duì)象表示和序列化的JavaScript之間如何轉(zhuǎn)換數(shù)據(jù)類型。
這樣在js端回調(diào)函數(shù)直接拿到的data就是一個(gè)javabean,可以直接通過(guò)data.xxx拿到bean的屬性xxx。
調(diào)用有JavaBean參數(shù)的java方法
dwr.xml配置同上。
在JS端,把要傳入的參數(shù)寫成javabean方式,例:要傳入一個(gè)名為student的javabean,參數(shù)有name,password,則
var stu = {name:"zhangsan",password:"zspassword"}; //這是json的表示方法
AAA.bbb(stu,callBack);
調(diào)用返回List、Set或者Map的java方法
dwr.xml配置同上。如果Collection里的數(shù)據(jù)是簡(jiǎn)單數(shù)據(jù)類型,則可不需要寫<convert>
在JS端,以List,里面數(shù)據(jù)是bean為例,data是一個(gè)List型,只要用for循環(huán)就可以依次拿到數(shù)據(jù)。
遍歷方法1:
for(var i=0;i<data.length;i++)
/*對(duì)于java方法的返回值為L(zhǎng)ist(Set)的情況,DWR將其轉(zhuǎn) 化為Object數(shù)組,傳遞個(gè)javascript*/
{
alert(data[i].name+":"+data[i].password);
}
遍歷方法2:
for(var property in data) //property為序號(hào),從0開始
{
var bean = data[property];
alert(bean.name+":"+bean.password);
}
相比返回為javabean多了一個(gè)遍歷而已。
如果java方法的返回值為Map,則如下
for(var property in data) //property為key值
/*對(duì)于 java方法的返回值為Map的情況,DWR將其轉(zhuǎn)化為一個(gè)Object,
其中Object的屬性為原Map的key值,屬性值為原Map相應(yīng)的 value值*/
{
var bean = data[property];
alert(bean.username);
alert(bean.password);
}
如果知道key值,則可直接用:data.key拿到value
調(diào)用有List、Set或者Map參數(shù)的java方法
在dwr.xml的<dwr>標(biāo)簽內(nèi)加入:<signatures>標(biāo)簽。
<signatures>標(biāo)簽是用來(lái)聲明java方法中List、Set或者M(jìn)ap參數(shù)所包含的確切類,以便java代碼作出判斷,是js-->java的。
例參數(shù)是javabean的List,則只要在參數(shù)為javabean的例子里構(gòu)造時(shí)候加上[]即可,如下:
var stu = [{name:"zhangsan",password:"zspassword"},{name:"lisi",password:"lspassword"}];//把List當(dāng)作數(shù)組來(lái)處理
AAA.bbb(stu,callBack);
并且在dwr.xml中增加如下的配置段
(剛才試驗(yàn)了下,不加也可以)<signatures>
<![CDATA[
import java.util.List;
import com.dwr.AAA; //AAA的包路徑要寫完整
import com.dwr.TestBean; //javabean
AAA.bbb(List<TestBean>);
]]>
</signatures>
例參數(shù)是javabean的Map,key是String,value是javabean,如下:
var stu =
{
"key1":{name:"zhangsan",password:"zspassword"},
"key2":{name:"lisi",password:"lspassword"}
};
AAA.bbb(stu,callBack);
并且在dwr.xml中增加如下的配置段
(剛才試驗(yàn)了下,不加也可以)<signatures>
<![CDATA[
import java.util.List;
import com.dwr.AAA; //AAA的包路徑要寫完整
import com.dwr.TestBean; //javabean
AAA.bbb(Map<String,TestBean>);
]]>
</signatures>