JAVA平台的AJAX 框架DWR使用

DWR现在已经在java平台的AJAX应用中使用比较广泛,下面将以前项目中用到的部分内容(测试部分)贴出来,以供参考。

配置使用什么的就不多说了,在网上搜一下就很多,非常简单。

只简单的说一下流程,然后直接把文件中的内容贴出来。具体的使用也可以参考dwr的网站:http://directwebremoting.org/dwr

1.首先在web.xml中配置dwr,以便在项目中使用

2.编写java应用,并在dwr.xml中配置(我的dwr.xml在web-info下)。

3.在jsp文件中调用

例如:

TestDwr.java中有一个方法public String test2(); 如果想在jsp页面中通过ajax方式调用步骤如下:

在dwr.xml中将方法公布出来

  1. <!--测试,调用方法-->
  2. <createjavascript="testdwr"creator="new">
  3. <paramname="class"value="com.yinbo.umpay.test.TestDwr"/>
  4. <includemethod="test1"/>
  5. <includemethod="test2"/>
  6. <includemethod="test3"/>
  7. <includemethod="test4"/>
  8. <includemethod="test5"/>
  9. <includemethod="test6"/>
  10. <includemethod="test7"/>
  11. <includemethod="test8"/>
  12. <includemethod="test9"/>
  13. </create>

javascript="testdwr"是指会生成testdwr.js的文件供前台调用。value="com.yinbo.umpay.test.TestDwr"是指方法所在的类,creator="new"是构造方法,这里使用new对象的方法,也可以通过spring来管理。这里注意即使用在TestDwr.java中是public方法,也要在配置文件中发布出来才可以访问。

在jsp中调用如下:

先要引入

<script src='<c:url value="/dwr/engine.js"/>' ></script>
<script src='<c:url value="/dwr/util.js"/>' ></script>

这两个js是支持库,必须引入。然后就是引入

<script src='<c:url value="/dwr/interface/testdwr.js"/>'></script>

这个testdwr.js是dwr动态生成的,你不用去寻找它放在哪儿。

jsp中的调用


function callTestMethod2(){
testdwr.test2(callBackFortestMethod2);
}

function callBackFortestMethod2(data){
// 其中 date 接收方法的返回值
// 可以在这里对返回值进行处理和显示等等
alert("the return value is " + data);
}

<input type="button" οnclick="callTestMethod2();"
value="调用有简单返回值的java方法">

这里的调用使用testdwr这个对象引用方法。testdwr.test2(callBackFortestMethod2); 返回值会传入callBackFortestMethod2方法的参数中。

web.xml

  1. <!--dwr-->
  2. <servlet>
  3. <servlet-name>dwr-invoker</servlet-name>
  4. <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
  5. <init-param>
  6. <param-name>debug</param-name>
  7. <param-value>true</param-value>
  8. </init-param>
  9. </servlet>
  10. <servlet-mapping>
  11. <servlet-name>dwr-invoker</servlet-name>
  12. <url-pattern>/dwr/*</url-pattern>
  13. </servlet-mapping>

dwr.xml

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEdwrPUBLIC"-//GetAheadLimited//DTDDirectWebRemoting2.0//EN""http://getahead.ltd.uk/dwr/dwr20.dtd">
  3. <dwr>
  4. <allow>
  5. <!--umpaydwrmethods-->
  6. <createjavascript="dwrFactory"creator="spring">
  7. <paramname="beanName"value="DwrFactoryImpl"/>
  8. <includemethod="testMethod"/>
  9. <includemethod="getRoleList"/>
  10. <includemethod="checkDetealPwd"/>
  11. <includemethod="sendSelectBank"/>
  12. <includemethod="checkBankaccountId"/>
  13. <includemethod="checkBankinterfaceId"/>
  14. <includemethod="getAccountList"/>
  15. <includemethod="checkUsername"/>
  16. <includemethod="checkwwwsite"/>
  17. <includemethod="checkAppIllegal"/>
  18. </create>
  19. <!--javabean返回值及参数转换-->
  20. <convertconverter="bean"
  21. match="com.yinbo.umpay.core.po.Roleinfo">
  22. <paramname="include"value="roleid,rolename"/>
  23. </convert>
  24. <!--测试,调用方法-->
  25. <createjavascript="testdwr"creator="new">
  26. <paramname="class"value="com.yinbo.umpay.test.TestDwr"/>
  27. <includemethod="test1"/>
  28. <includemethod="test2"/>
  29. <includemethod="test3"/>
  30. <includemethod="test4"/>
  31. <includemethod="test5"/>
  32. <includemethod="test6"/>
  33. <includemethod="test7"/>
  34. <includemethod="test8"/>
  35. <includemethod="test9"/>
  36. </create>
  37. <!--javabean返回值及参数转换-->
  38. <convertconverter="bean"match="com.yinbo.umpay.core.po.Userinfo">
  39. <paramname="include"value="userid,username"/>
  40. </convert>
  41. <!--spring生成-->
  42. <createjavascript="testdwr2"creator="spring">
  43. <paramname="beanName"value="TestDwrImpl"/>
  44. <includemethod="test2"/>
  45. </create>
  46. </allow>
  47. <!--List,Set,Map作参数时,声明包含的确切类-->
  48. <signatures>
  49. <![CDATA[
  50. importjava.util.List;
  51. importcom.yinbo.umpay.test.TestDwr;
  52. importcom.yinbo.umpay.core.po.Userinfo;
  53. TestDwr.test7(List<Userinfo>);
  54. TestDwr.test9(Map<String,Userinfo>);
  55. ]]>
  56. </signatures>
  57. </dwr>

TestDwr.java

  1. packagecom.yinbo.umpay.test;
  2. importjava.util.ArrayList;
  3. importjava.util.HashMap;
  4. importjava.util.List;
  5. importjava.util.Map;
  6. importcom.yinbo.umpay.core.po.*;
  7. publicclassTestDwr{
  8. publicvoidtest1(){
  9. try{
  10. Thread.sleep(5000);
  11. }catch(InterruptedExceptione){
  12. //TODOAuto-generatedcatchblock
  13. e.printStackTrace();
  14. }
  15. System.out.println("dwrtest1.");
  16. }
  17. publicStringtest2(){
  18. return"dwrtest2.";
  19. }
  20. publicStringtest3(Stringdata,Stringdata2){
  21. System.out.println(data);
  22. System.out.println(data2);
  23. returndata+"return"+data2;
  24. }
  25. publicUserinfotest4(){
  26. Userinfou=newUserinfo();
  27. u.setUserid("sec.peng");
  28. u.setUsername("pengyuanfeng");
  29. returnu;
  30. }
  31. publicvoidtest5(Userinfouserinfo){
  32. System.out.println(userinfo.getUserid());
  33. System.out.println(userinfo.getUsername());
  34. }
  35. publicListtest6(){
  36. Userinfou1=newUserinfo();
  37. Userinfou2=newUserinfo();
  38. u1.setUserid("sec.peng");
  39. u1.setUsername("pengyuanfeng");
  40. u2.setUserid("www");
  41. u2.setUsername("www.163.com");
  42. Listlist=newArrayList();
  43. list.add(u1);
  44. list.add(u2);
  45. returnlist;
  46. }
  47. publicvoidtest7(Listlist){
  48. for(inti=0;i<list.size();i++){
  49. Userinfouserinfo=(Userinfo)list.get(i);
  50. System.out.println(userinfo.getUserid());
  51. System.out.println(userinfo.getUsername());
  52. }
  53. }
  54. publicMaptest8(){
  55. Mapmap=newHashMap();
  56. Userinfou=newUserinfo();
  57. u.setUserid("aaa");
  58. u.setUsername("bbbbbb");
  59. map.put("u1",u);
  60. returnmap;
  61. }
  62. publicvoidtest9(Mapmap){
  63. Userinfouserinfo=(Userinfo)map.get("u1");
  64. System.out.println(userinfo.getUserid());
  65. System.out.println(userinfo.getUsername());
  66. }
  67. }

testdwr.jsp

  1. <%@pagelanguage="java"pageEncoding="UTF-8"%>
  2. <html>
  3. <head>
  4. <title>testdwr</title>
  5. <scriptsrc='<c:urlvalue="/dwr/interface/testdwr.js"/>'></script>
  6. <scriptsrc='<c:urlvalue="/dwr/interface/testdwr2.js"/>'></script>
  7. <scriptsrc='<c:urlvalue="/dwr/interface/dwrFactory.js"/>'></script>
  8. <scriptsrc='<c:urlvalue="/dwr/engine.js"/>'></script>
  9. <scriptsrc='<c:urlvalue="/dwr/util.js"/>'></script>
  10. <script>
  11. functioncallTestMethod1(){
  12. testdwr.test1();
  13. }
  14. functioncallTestMethod2(){
  15. testdwr.test2(callBackFortestMethod2);
  16. }
  17. functioncallBackFortestMethod2(data){
  18. //其中date接收方法的返回值
  19. //可以在这里对返回值进行处理和显示等等
  20. alert("thereturnvalueis"+data);
  21. }
  22. functioncallTestMethod3(){
  23. //定义要传到java方法中的参数
  24. vardata;
  25. //构造参数
  26. data="testString";
  27. testdwr.test3(data,"bbb",callBackTestMethod3);
  28. }
  29. functioncallBackTestMethod3(data){
  30. alert(data);
  31. }
  32. functioncallTestMethod4(){
  33. testdwr.test4(callBackFortestMethod4);
  34. }
  35. functioncallBackFortestMethod4(data){
  36. //其中data接收方法的返回值
  37. //对于JavaBean返回值,有两种方式处理
  38. //不知道属性名称时,使用如下方法
  39. /*
  40. for(varpropertyindata){
  41. alert("property:"+property);
  42. alert(property+":"+data[property]);
  43. }
  44. */
  45. //知道属性名称时,使用如下方法
  46. alert(data.userid);
  47. alert(data.username);
  48. }
  49. functioncallTestMethod5(){
  50. //定义要传到java方法中的参数
  51. vardata;
  52. //构造参数,date实际上是一个object
  53. data={userid:"ppp",username:"pengyf"}
  54. testdwr.test5(data);
  55. }
  56. functioncallTestMethod6(){
  57. testdwr.test6(callBackFortestMethod6);
  58. }
  59. functioncallBackFortestMethod6(data){
  60. //其中date接收方法的返回值
  61. DWRUtil.addRows('addRowsBasic',data,[
  62. function(data){returndata.userid;},
  63. function(data){returndata.username;}
  64. ]);
  65. if(data!=null&&typeofdata=='object')alert(dwr.util.toDescriptiveString(data,2));
  66. elsedwr.util.setValue('d5',dwr.util.toDescriptiveString(data,1));
  67. //知道属性名称时,使用如下方法
  68. for(vari=0;i<data.length;i++){
  69. alert(data[i].userid);
  70. alert(data[i].username);
  71. }
  72. }
  73. functioncallTestMethod7(){
  74. //定义要传到java方法中的参数
  75. vardata;
  76. //构造参数,date实际上是一个object数组,即数组的每个元素均为object
  77. data=[
  78. {
  79. userid:"u1",
  80. username:"user1"
  81. },
  82. {
  83. userid:"u2",
  84. username:"user2"
  85. }
  86. ];
  87. testdwr.test7(data);
  88. }
  89. functioncallTestMethod8(){
  90. testdwr.test8(callBackFortestMethod8);
  91. }
  92. functioncallBackFortestMethod8(data){
  93. //其中date接收方法的返回值
  94. if(data!=null&&typeofdata=='object')alert(dwr.util.toDescriptiveString(data,2));
  95. elsedwr.util.setValue('d5',dwr.util.toDescriptiveString(data,1));
  96. //知道属性名称时,使用如下方法
  97. for(varpropertyindata){
  98. varbean=data[property];
  99. alert(bean.userid);
  100. alert(bean.username);
  101. }
  102. }
  103. functioncallTestMethod9(){
  104. //定义要传到java方法中的参数
  105. vardata;
  106. //构造参数,date实际上是一个object数组,即数组的每个元素均为object
  107. data={
  108. "u1":{
  109. userid:"uu1",
  110. username:"user1"
  111. },
  112. "u2":{
  113. userid:"uu2",
  114. username:"user2"
  115. }
  116. };
  117. testdwr.test9(data);
  118. }
  119. functionaddOptions(){
  120. //将数组添加到下拉菜单里面去;
  121. vararrayFive=['One','Two','Three','Four','Five'];
  122. DWRUtil.addOptions('addOptionsBasic',arrayFive);
  123. }
  124. functionaddOptions2(){
  125. vararrayObject=[
  126. {name:'One',value:'1'},
  127. {name:'Two',value:'2'},
  128. {name:'Three',value:'3'},
  129. {name:'Four',value:'4'},
  130. {name:'Five',value:'5'}
  131. ];
  132. //后面2个参数是值,文本
  133. DWRUtil.addOptions('addOptionsObject1',arrayObject,"value","name");
  134. //这样调用表示值和文本都是name
  135. //DWRUtil.addOptions('addOptionsObject1',arrayObject,"name");
  136. }
  137. functionaddOptions3(){
  138. varmap={one:1,two:2,three:3,four:4,five:5};
  139. //同上,one是值;1是文本;
  140. //DWRUtil.addOptions('addOptionsMap1',map);
  141. //同上,1是值;one是文本;
  142. DWRUtil.addOptions('addOptionsMap1',map,true);
  143. }
  144. functionaddOptions4(){
  145. varmap={one:1,two:2,three:3,four:4,five:5};
  146. //同上,one是值;1是文本;
  147. //DWRUtil.addOptions('addOptionsMap1',map);
  148. //同上,1是值;one是文本;
  149. DWRUtil.addOptions('removeItems',map,true);
  150. }
  151. functioninit(){
  152. dwr.util.useLoadingMessage("加载中...");
  153. }
  154. functiontestrows(){
  155. vardata=[
  156. {userid:'One',username:'1'},
  157. {userid:'tow',username:'2'}
  158. ];
  159. DWRUtil.addRows('addRowsBasic',data,[
  160. function(data){returndata.userid;},
  161. function(data){returndata.username;}
  162. ],
  163. {
  164. rowCreator:function(options){
  165. varrow=document.createElement("tr");
  166. varindex=options.rowIndex*50;
  167. row.style.color="rgb("+index+",0,0)";
  168. returnrow;
  169. },
  170. cellCreator:function(options){
  171. vartd=document.createElement("td");
  172. varindex=255-(options.rowIndex*50);
  173. td.style.backgroundColor="rgb("+index+",255,255)";
  174. td.style.fontWeight="bold";
  175. returntd;
  176. }
  177. }
  178. );//endaddrows
  179. }//endfunction
  180. //callTestMethod1();
  181. functiontestspring(){
  182. testdwr2.test2(callBacktestspring);
  183. }
  184. functioncallBacktestspring(data){
  185. //其中date接收方法的返回值
  186. //可以在这里对返回值进行处理和显示等等
  187. alert("thereturnvalueis"+data);
  188. }
  189. functiontestDwrFactory(){
  190. dwrFactory.testMethod(callBackTestDwrFactory);
  191. }
  192. functioncallBackTestDwrFactory(data){
  193. alert("thereturnvalueis"+data);
  194. }
  195. </script>
  196. </head>
  197. <bodyonload="init();">
  198. testdwr
  199. <br>
  200. <inputtype="button"onclick="callTestMethod1();"
  201. value="调用没有返回值和参数的JAVA方法">
  202. <br>
  203. <inputtype="button"onclick="callTestMethod2();"
  204. value="调用有简单返回值的java方法">
  205. <br>
  206. <inputtype="button"onclick="callTestMethod3();"
  207. value="调用有简单参数的java方法">
  208. <br>
  209. <inputtype="button"onclick="callTestMethod4();"
  210. value="调用返回JavaBean的java方法">
  211. <br>
  212. <inputtype="button"onclick="callTestMethod5();"
  213. value="调用有JavaBean参数的java方法">
  214. <br>
  215. <inputtype="button"onclick="callTestMethod6();"
  216. value="调用返回List、Set或者Map的java方法">
  217. <br>
  218. <inputtype="button"onclick="callTestMethod7();"
  219. value="调用有List、Set或者Map参数的java方法">
  220. <br>
  221. <inputtype="button"onclick="callTestMethod8();"
  222. value="调用返回Map的java方法">
  223. <br>
  224. <inputtype="button"onclick="callTestMethod9();"
  225. value="参数为Map的java方法">
  226. <br>
  227. <p>
  228. testdwrutil
  229. <br>
  230. *选中selectRangeBasic文本框里面从第五个字符到第15个字符之间的字符<br>
  231. <inputtype="text"id="selectRangeBasic">
  232. <inputtype="button"onclick="DWRUtil.selectRange('selectRangeBasic',5,15);"
  233. value="selectRange">
  234. <inputtype="button"onclick="alert(DWRUtil.getSelection('selectRangeBasic'));"
  235. value="_getSelection">
  236. <br>
  237. *将数组添加到下拉菜单里面去<br>
  238. <selectname="addOptionsBasic">
  239. </select>
  240. <inputtype="button"onclick="addOptions();"
  241. value="addOptions">
  242. <br>
  243. *得到addOptionsBasic对象的值<br>
  244. <inputtype="button"onclick="alert(DWRUtil.getValue('addOptionsBasic'));"
  245. value="getValue">
  246. <br>*得到下拉框addOptionsBasic显示的文本<br>
  247. <inputtype="button"onclick="alert(DWRUtil.getText('addOptionsBasic'));"
  248. value="getText">
  249. <br>*将数组及值添加到下拉菜单里面去<br>
  250. <selectname="addOptionsObject1">
  251. </select>
  252. <inputtype="button"onclick="addOptions2();"
  253. value="addOptions2">
  254. <inputtype="button"onclick="alert(DWRUtil.getText('addOptionsObject1'));"
  255. value="getText">
  256. <inputtype="button"onclick="alert(DWRUtil.getValue('addOptionsObject1'));"
  257. value="getValue">
  258. <br>*将对象属性及值添加到下拉菜单里面去<br>
  259. <selectname="addOptionsMap1">
  260. </select>
  261. <inputtype="button"onclick="addOptions3();"
  262. value="addOptions3">
  263. <inputtype="button"onclick="alert(DWRUtil.getText('addOptionsMap1'));"
  264. value="getText">
  265. <inputtype="button"onclick="alert(DWRUtil.getValue('addOptionsMap1'));"
  266. value="getValue">
  267. <br>
  268. <inputtype="button"onclick="testrows();"
  269. value="testrows">
  270. <inputtype="button"onclick="DWRUtil.removeAllRows('addRowsBasic');"
  271. value="removeAllRows">
  272. <br>
  273. <tablewidth="300"border="1"height="30">
  274. <tbodyid="addRowsBasic">
  275. <tr>
  276. <th>userid</th>
  277. <th>username</th>
  278. </tr>
  279. </tbody>
  280. </table>
  281. <inputtype="button"onclick="testspring();"value="testspring">
  282. <p/>
  283. <inputtype="button"onclick="testDwrFactory();"value="umpaydwr">
  284. </body>
  285. </html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值