日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DWR使用总结

發布時間:2023/12/31 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DWR使用总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

DWR是方便使用AJAX連接JS和JAVA的的一個框架,把服務器端 Java 對象的方法公開給 JavaScript 代碼
如果是用dwr2.0的jar包,還需要同時導入log4j.jar和commons-loggin.jar,勿忘!!
web.xml和dwr.xml放在WEB-INF下!
-----------------------------
配置web.xml:WEB工程啟動的時候會在這個里面找到具體所用到的類的路徑,由此進行加載

<servlet> <servlet-name> dwr-invoke </servlet-name> <servlet-class> uk.ltd.getahead.dwr.DWRServlet</servlet-class> </servlet> <init-param> <!--這個是調試用,如果正式發布請該為false,不過聽說2.0就默認為true了 --> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <!--這個是DWR2.0必須的,不然會報java.lang.IllegalArgumentException --> <param-name>classes</param-name> <param-value>java.lang.Object</param-value> </init-param><servlet-mapping> <servlet-name> dwr-invoke </servlet-name> <url-pattern> /dwr/* </url-pattern> </servlet-mapping>




-----------------------------
配置dwr.xml: dwr.xml的作用是讓你告訴DWR哪些class中的哪些方法你需要暴露給前臺使用,當DWR啟動時候根據dwr.xml這個文件把java類中的方法轉成js中可用的類中方法,使前臺可以使用。

注:以下是不全按dwr2.0寫的,如果用的是DWR2.0,那java里暴露類(藍字顯示)不能寫在<create>屬性里,應刪除后寫在<include method="" />前,<param name="class" value="***java里暴露的class,必須寫完整路徑***" />。

<dwr> <allow> <create creator="new" javascript="***js調用的class***" class="***java里暴露的class,必須寫完整路徑***"> <include method="***java暴露類里要公開的方法,如果不寫默認全部公開***" /> </create> </allow> </dwr>

-----------------------------
在html或js頁面中加入

<script src="<%=basePath %>dwr/interface/java里暴露的class"></script> <script src="<%=basePath %>dwr/engine.js"></script> <script src="<%=basePath %>dwr/util.js"></script> <script type="text/javascript"> function doMethod() { //調用方法:若公開的類是AAA,公開的AAA里的方法是bbb([參數]); AAA.bbb([參數],callBack);//回調函數callBack() } function callBack(data){ //data是后臺返回的值,名字自取,也可省略,因為JS允許 處理方法……;//如果callBack()沒有寫明返回值,可以通過argments[0]拿到 } </script>





其實我們調用AAA.bbb([參數],callBack);就是做了以下這一步:
(下面紅字是包裝好的,不在前臺,所以即使你沒有創建html或者jsp來調用,也可以通過localhost:8080/工程名/dwr 來看到你暴露的java類進行測試)

function AAA() {};AAA.bbb = function([參數], callback) {DWREngine._execute('/dwr/dwr', 'AAA', 'bbb', [參數], callback); }



通過在dwr.xml暴露的方法得到js里的方法,當我們調用AAA.bbb時候再通過/dwr/dwr轉到DWRServlet中去用JAVA里的AAA.bbb方法,然后返回值到callback中(中間經過dwr.xml的convert)


----------------------------
上面對dwr的工作大致分析了下,現在對于參數類型的不同,對dwr.xml也要進行修正。

DWR自動地在Java和JavaScript表示之間調整簡單數據類型,這些類型包括Java原生類型和它們各自的封裝類表示,還有String、Date、數組和集合類型。但如果參數類型非簡單數據類型,則要通過轉換。

調用返回JavaBean的java方法

在dwr.xml的<allow>標簽中加入

<convert converter="bean" match="***一般來說是javabean***"> ?//int,String,list等不需要顯式的轉換就可以被js拿到 ? ? ?<param name="include" value="***javabean中的屬性,用','隔開***" /> ?//這句可以不寫 </convert>

?<creator>標簽負責公開用于Web遠程的類和類的方法,<convertor>標簽則負責這些方法的參數和返回類型。convert元素的作用是告訴DWR在服務器端Java 對象表示和序列化的JavaScript之間如何轉換數據類型

這樣在js端回調函數直接拿到的data就是一個javabean,可以直接通過data.xxx拿到bean的屬性xxx。



調用有JavaBean參數的java方法

dwr.xml配置同上。

在JS端,把要傳入的參數寫成javabean方式,例:要傳入一個名為student的javabean,參數有name,password,則
var stu = {name:"zhangsan",password:"zspassword"}; //這是json的表示方法
AAA.bbb(stu,callBack);



調用返回List、Set或者Map的java方法

dwr.xml配置同上。如果Collection里的數據是簡單數據類型,則可不需要寫<convert>

?在JS端,以
List,里面數據是bean為例,data是一個List型,只要用for循環就可以依次拿到數據。
?遍歷方法1:
for(var i=0;i<data.length;i++) ?
? ?/*
對于java方法的返回值為List(Set)的情況,DWR將其轉 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 化為Object數組,傳遞個javascript*/
{
? ?alert(data[i].name+":"+data[i].password);
}

遍歷方法2:
for(var
property in data) //property為序號,從0開始
{

? ?var bean = data[
property];
? ?alert(bean.name+":"+bean.password);
}

相比返回為javabean多了一個遍歷而已。

如果java方法的返回值為Map,則如下

for(var property in data) //property為key值
? ?/*對于 java方法的返回值為Map的情況,DWR將其轉化為一個Object,
? ? ? 其中Object的屬性為原Map的key值,屬性值為原Map相應的 value值*/
{
?var bean = data[property];
?alert(bean.username);
?alert(bean.password);
}

如果知道key值,則可直接用:data.key拿到value


調用有List、Set或者Map參數的java方法


?在dwr.xml的<dwr>標簽內加入:<signatures>標簽。

<signatures>標簽是用來聲明java方法中List、Set或者Map參數所包含的確切類,以便java代碼作出判斷,是js-->java的。

例參數是javabean的List,則只要在參數為javabean的例子里構造時候加上[]即可,如下:

var stu = [{name:"zhangsan",password:"zspassword"},{name:"lisi",password:"lspassword"}];
?//把List當作數組來處理
AAA.bbb(stu,callBack);

并且在dwr.xml中增加如下的配置段(剛才試驗了下,不加也可以)

<signatures>
? <![CDATA[
? ?import java.util.List;
? ?import com.dwr.AAA; ? ? //AAA的包路徑要寫完整
? ?import com.dwr.TestBean; ?//javabean
? ?AAA.bbb(
List<TestBean>);
? ]]>
?</signatures>


例參數是javabean的Map,key是String,value是javabean,如下:
var stu =
{
? ?"key1":{name:"zhangsan",password:"zspassword"},
? ?"key2":{name:"lisi",password:"lspassword"}
};
AAA.bbb(stu,callBack);
?并且在dwr.xml中增加如下的配置段(剛才試驗了下,不加也可以)

<signatures>
? <![CDATA[
? ?import java.util.List;
? ?import com.dwr.AAA; ? ? //AAA的包路徑要寫完整
? ?import com.dwr.TestBean; ?//javabean
? ?AAA.bbb(
Map<String,TestBean>);
? ]]>
?</signatures>

轉載于:https://blog.51cto.com/3001448/1206047

總結

以上是生活随笔為你收集整理的DWR使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。