1 DWR帮助我们将本地的JavaScript脚本函数调用转变成对远程Java对象函数的调用。在函数的调用过程中我们需要传递参数,这样我们就需要将本地的javascript变量转变成对应的java类型变量。这个就是Convertor的作用。DWR内部为我们编写了一些JAVA主要类型的Convertor.默认下面的数据类型会自动转换:boolean, byte, short, int, long, float, double, char, java.lang.Boolean, java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Float, java.lang.Double, java.lang.Character, java.math.BigInteger, java.math.BigDecimal and java.lang.String.但是假如我们有这样一个方法A.setB(B b),现在我们要在javascript脚本中调用该方法,我们需要传递java类型为B的参数,这个时候我们就需要配B配置Convertor.下面我们编写一个添加用户的简单程序: 2 3 1、写一个用户信息Bean:UserBean,包含简单的userName,userPassword信息。 4 5 2、写一个类,里面包含添加用户函数DwrService.addUser(UserBean user)代码如下: 6 7 package test; 8 9 import java.io.IOException; 10 11 import org.directwebremoting.WebContext; 12 import org.directwebremoting.WebContextFactory; 13 import javax.servlet.ServletException; 14 15 16 public class DwrService { 17 public String check(String name){ 18 //访问数据库验证信息 19 if(name.startsWith("aa")){ 20 return "用户已经存在"; 21 } 22 else{ 23 return "可以使用该用户"; 24 } 25 } 26 public String getInclude() throws ServletException, IOException 27 { 28 return WebContextFactory.get().forwardToString("/test.jsp"); 29 } 30 31 public String addUser(UserBean user){ 32 //将用户信息添加到数据库中 33 return "Name:"+user.getUserName()+";Password="+user.getUserPassword(); 34 } 35 36 37 } 38 39 3、配置dwr.xml文件,注册类方法和Converte信息 40 41 <?xml version="1.0" encoding="UTF-8"?> 42 <!DOCTYPE dwr PUBLIC 43 "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" 44 "http://getahead.org/dwr/dwr20.dtd"> 45 46 <dwr> 47 <allow> 48 <convert converter="bean" match="test.UserBean"/> 49 <create creator="new" javascript="DwrService"> 50 <param name="class" value="test.DwrService"/> 51 </create> 52 </allow> 53 </dwr> 54 55 4、编写页面文件,提供功能。index.html 56 57 <html> 58 <head> 59 <script type='text/javascript' src='/test/dwr/interface/DwrService.js'></script> 60 <script type='text/javascript' src='/test/dwr/engine.js'></script> 61 <script type='text/javascript' src='/test/dwr/util.js'></script> 62 63 <script LANGUAGE=javascript> 64 <!-- 65 function addUser() { 66 var user={userName:null,userPassword:null}; 67 dwr.util.getValues(user); 68 DwrService.addUser(user,function(data) { 69 dwr.util.setValue("userInfo",data); 70 }); 71 }//--> 72 </script> 73 </head> 74 <body> 75 <hr> 76 name:<input type="text" id="userName"/> 77 <br> 78 password:<input type="text" id="userpassword"/> 79 <br> 80 <input value="submit" type="button" onclick="addUser()" /> 81 <br> 82 <span id="userinfo"></span> 83 </body> 84 </html> 85 86 5、现在我们就可以通过Bean Converter将javascript变量user转变成java类型UserBean类型传给java方法了。 87 88 说明:dwr.util.getValues(Object);如同dwr.util.getValue("id")方法,用来将页面中的元素内容复制到变量中,与getValue不同getValues方法不返回值内容而是修改参数Object中的信息。Object 中的内容是一些键值对,键对应到页面元素的id属性,值对应元素的内容。我们可以通过将页面元素的id设置为Bean的属性,然后通过该方法轻松的获取用户的输入信息。 89 90 与读取属性相对的是设置页面元素的属性:setValue()和setValues()