一、DWR调用参数类型和返回类型都是JavaBean的java方法
1.index.jsp
var u = {
username : "123",
password : "123"
};
user.checkLogin(u, function(data) {
alert("username="+data.username+";password="+data.password);
})
2.User.java
package bean; public class User { private String username; private String password; public User(){ } public User(String username){ this.username=username; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public User checkLogin(User user){ return user; } }
3.dwr.xml
<create creator="new" javascript="user">
<param name="class" value="bean.User" />
<include method="checkLogin" />
</create>
<!-- 转换JavaBean --> <convert converter="bean" match="bean.User"> <param name="include" value="username,password" /> </convert>
二、DWR调用参数类型是String,返回类型是Object的java方法
1.jsp页面
helloDwr.getObject("zxc",function(data){
alert(data.name);
});
2.dwr.xml配置
<create creator="new" javascript="helloDwr">
<param name="class" value="bean.HelloDwr"/>
</create>
<!-- 转换object对象 -->
<convert converter="object" match="bean.Cat">
<param name="force" value="true" />
</convert>
3.Cat.java
package bean; public class Cat { private String name; //构造器 public Cat(String name){ this.name=name; } }
4.HelloDwr的方法
//返回一个普通的Java对象,Cat对象为其属性没有提供setter和getter方法
public Cat getObject(String name){
return new Cat("name");
}
三、DWR调用参数类型是对象数组,返回类型是对象数组的java方法
1.jsp页面
var u=[{username:"Jim",password:"123"},{username:"cat",password:"123"},{username:"sunny",password:"123"}];
helloDwr.getPersonArray(u,function(data){
for(var i=0;i<data.length;i++){
alert(data[i].username);
}
});
2.dwr.xml不需要配置
3.HelloDwr的方法
//返回一个数组对象
public User[] getPersonArray(User[] u){
return u;
}
四、DWR调用参数类型是泛型Map,返回类型也是泛型Map的java方法
1.jsp
var u={a:{username:"Jim",password:"123"},b:{username:"cat",password:"123"},c:{username:"sunny",password:"123"}};
helloDwr.getPersonMap(u,function(data){
var result="";
for(var key in data){
result+="键为"+key+",其值为:"+data[key].username+"<br>";
}
alert(result);
});
2.dwr.xml不需要配置
3.HelloDwr的方法
//返回一个Map对象
public Map<String ,User>getPersonMap(Map<String,User> pmap){
return pmap;
}
五、DWR调用参数类型是无泛型list集合的java方法
1.jsp
var u=[{username:"Jim",password:"123"},{username:"cat",password:"123"},{username:"sunny",password:"123"}];
helloDwr.sendListNogeneric(u,function(data){
alert(data);
});
2.dwr.xml
<signatures>
<![CDATA[
import java.util.List;
import bean.HelloDwr;
import bean.User;
HelloDwr.sendListNogeneric (List<User>);
]]>
</signatures>
3.HelloDwr的方法
//远程方法的参数是集合
public String sendListNogeneric(List p1){
String result="";
for(Object p:p1){
result+=((User)p).getUsername()+"<br>";
}
return result;
}
六、DWR调用参数类型是泛型list集合,返回类型也是泛型list集合的java方法
1.jsp
var u=[{username:"Jim",password:"123"},{username:"cat",password:"123"},{username:"sunny",password:"123"}];
helloDwr.getUserList(u,function(data){
for(var i=0;i<data.length;i++){
alert(data[i].username);
}
});
2.dwr.xml无需配置
3.HelloDwr的方法
//返回一个集合对象
public List<User> getUserList(List<User> list){
return list;
}
七、完整的例子
1.index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gbk" isELIgnored="false"%> <% String path = request.getContextPath(); %> <html> <head> <mce:script type='text/javascript' src='<%=path%><!-- /dwr/interface/user.js'> // --></mce:script> <mce:script type='text/javascript' src='<%=path%><!-- /dwr/interface/helloDwr.js'> // --></mce:script> <mce:script type='text/javascript' src='<%=path%><!-- /dwr/engine.js'> // --></mce:script> <mce:script type='text/javascript' src='<%=path%><!-- /dwr/util.js'> // --></mce:script> <mce:script type="text/javascript"><!-- function checkLogin() { var username = document.getElementById("username").value; var password = document.getElementById("password").value; var u = { username : username, password : password }; if (username.match(/^/s*$/)) { alert("请输入用户名!"); } else if (password.match(/^/s*$/)) { alert("请输入密码!"); } else { user.checkLogin(u, function(data) { alert("username="+data.username+";password="+data.password); }) } } function f(){ helloDwr.getObject("zxc",function(data){ alert(data.name); }); } function a(){ var u=[{username:"Jim",password:"123"},{username:"cat",password:"123"},{username:"sunny",password:"123"}]; helloDwr.getPersonArray(u,function(data){ for(var i=0;i<data.length;i++){ alert(data[i].username); } }); } function b(){ var u={a:{username:"Jim",password:"123"},b:{username:"cat",password:"123"},c:{username:"sunny",password:"123"}}; helloDwr.getPersonMap(u,function(data){ alert(data.a.username); alert(data.b.username); alert(data.c.username); }); } function c(){ var u=[{username:"Jim",password:"123"},{username:"cat",password:"123"},{username:"sunny",password:"123"}]; helloDwr.sendListNogeneric(u,function(data){ alert(data); }); } function d(){ var u=[{username:"Jim",password:"123"},{username:"cat",password:"123"},{username:"sunny",password:"123"}]; helloDwr.getUserList(u,function(data){ for(var i=0;i<data.length;i++){ alert(data[i].username); } }); } // --></mce:script> </head> <body> <form> 用户名: <input type="text" name="username" id="username" /> <br /> 密 码: <input type="password" name="password" id="password" /> <br /> <input type="button" value="javabean转换" οnclick="checkLogin()" /> <input type="button" value="Object转换" οnclick="f()"/> <input type="button" value="数组转换" οnclick="a()"/> <input type="button" value="Map转换" οnclick="b()"/> <input type="button" value="无泛型list集合转换" οnclick="c()"/> <input type="button" value="泛型list集合转换" οnclick="d()"/> </form> </body> </html>
2.HelloDwr.java
package bean; import java.util.List; import java.util.Map; public class HelloDwr { //使用JavaBean作为和返回参数的方法 public User sendObjec(User u){ return u; } //返回一个普通的Java对象,Cat对象为其属性没有提供setter和getter方法 public Cat getObject(String name){ return new Cat("name"); } //返回一个集合对象 public List<User> getUserList(List<User> list){ return list; } //返回一个数组对象 public User[] getPersonArray(User[] u){ return u; } //返回一个Map对象 public Map<String ,User>getPersonMap(Map<String,User> pmap){ return pmap; } //远程方法的参数是集合 public String sendListNogeneric(List p1){ String result=""; for(Object p:p1){ result+=((User)p).getUsername()+"<br>"; } return result; } }
3.Cat.java
package bean; public class Cat { private String name; //构造器 public Cat(String name){ this.name=name; } }
4.dwr.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd"> <dwr> <!-- without allow, DWR isn't allowed to do anything --> <allow> <create creator="new" javascript="user"> <param name="class" value="bean.User" /> <include method="checkLogin" /> </create> <create creator="new" javascript="helloDwr"> <param name="class" value="bean.HelloDwr"/> </create> <!-- 转换JavaBean --> <convert converter="bean" match="bean.User"> <param name="include" value="username,password" /> </convert> <!-- 转换object对象 --> <convert converter="object" match="bean.Cat"> <param name="force" value="true" /> </convert> </allow> <signatures> <!--[CDATA[ import java.util.List; import bean.HelloDwr; import bean.User; HelloDwr.sendListNogeneric (List<User>); ]]--> </signatures> </dwr>
5.web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
注:源码已经上传至CSDN,可访问http://download.csdn.net/source/3080258去下载