以前一直以为DWR只能接收和传输字符串的,后来看了《疯狂AJAX讲义》后,恍然大悟。Convert不得不说,是一个好东东啊!!!!
首先,使用DWR,需配置dwr.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd"> <dwr> <allow> <create creator="new" javascript="MyDWR"> <param name="class" value="com.DWRTest.Controller.MyDWR"/> </create> <convert converter = "bean" match = "com.DWRTest.model.*"/> </allow> </dwr>
我们配置com.DWRTest.Controller.MyDWR,且配置com.DWRTest.model下的所有文件一个转换器。这个转换器,才使得DWR能够传递及访问对象。
假设model下有一个POJO:
package com.DWRTest.model; public class User { private String username; private String password; 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; } }
那么可以做以下几个实验:
1.DWR获得JAVA传递的对象
java代码:
public User getMyUser() { User user = new User(); user.setUsername("tammypi"); user.setPassword("1988"); return user; }
利用javascript访问这个对象:
MyDWR.getMyUser(function(user){ alert(user); alert('用户名:' + user.username + ",密码:"+user.password); }
2.DWR获得JAVA传递的对象List:
java代码:
public List<User> getMyUserList() { List<User> list = new ArrayList<User>(); User user2 = new User(); user2.setUsername("tammypi"); user2.setPassword("1988"); User user1 = new User(); user1.setUsername("tony"); user1.setPassword("1962"); list.add(user1); list.add(user2); return list; }
利用javascript访问list:
MyDWR.getMyUserList(function(list){ for(var i=0;i<list.length;i++) { alert("访问第"+i+"个对象"); alert(list[i].username+","+list[i].password); } });
3.DWR传递对象,并访问JAVA返回的Map:
java代码:
public Map<String,String> insertUser(User user){ System.out.println(user.getUsername()+","+user.getPassword()); Map<String,String> map = new HashMap<String,String>(); map.put(user.getUsername(), user.getPassword()); return map; }
利用javascript访问返回的map:
var myUser = new Object(); myUser.username = "111"; myUser.password = "777"; MyDWR.insertUser(myUser,function(dat11){ for(var key in dat11) { alert(key+","+dat11[key]); } });
4.DWR传递对象数组:
java代码:
public void insertUserList(User[] users){ for(int i=0;i<users.length;i++){ User user = users[i]; System.out.println("用户名:"+user.getUsername()+",密码:"+user.getPassword()); } }
javascript代码:
var arr = new Array(); var myUser1 = new Object(); myUser1.username = "kkdkf"; myUser1.password = "kj"; var myUser2 = new Object(); myUser2.username = "kkdkf113434"; myUser2.password = "kj343434"; arr[0]=myUser1; arr[1]=myUser2; MyDWR.insertUserList(arr);
看来还是要不断的学习啊,以前执着于已经掌握的方法,却从来没有思考过,已经掌握的方法到底好不好。人类之所以脱离于猿猴,就是因为学会了思考,学会了不断发展与进步。写代码也是一样,应该不断的吸取养分,应该不断的进步。即使是重复的劳动,也要不断的改变自己的劳动方式,以使得劳动更有效率!