DWR 2.0 增加了一个很有趣的新特性,Annotation,因此可以摆脱了dwr.xml里面的配置.同时也可以方便的和spring整合.
从官方网站下载dwr.jar包。然后将它放在你webapp的WEB-INF/lib目录下。 修改web.xml







































beans.xml是spring的配置文件.org.springframework.web.context.ContextLoaderListener是一个监听器.
< param-name > classes </ param-name >
< param-value >
com.spring.User,com.beans.Book
</ param-value >
</ init-param >
param-value:参数为被注解的类.
编写相关类
com.beans.Book:
public class Book {
@RemoteProperty
private String name;
@RemoteProperty
private String author;
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this .author = author;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
}
@DataTransferObject: 标注在客户端和服务器之间转换类.对应dwr.xml中的<convert>标签.
注解的源代码:
@Retention(RetentionPolicy.RUNTIME)
public @ interface DataTransferObject
{
/**
* Converter that converts instance of the class (default: bean converter).
*/
Class <? extends Converter > converter() default BeanConverter. class ;
/**
* Parameters for the converter.
*/
Param[] params() default {};
}
关于annotation可以看这篇文章,java元数据
@RemoteProperty :标注在类中需要转换的属性.
源代码:
@Retention(RetentionPolicy.RUNTIME)
public @ interface RemoteProperty
{
}
如果使用dwr.xml配置,可以这样:
< param name ="include" value ="name, author" />
</ convert >
User:
creatorParams = {
@Param(name = " beanName " ,value = " user " )
})
@DataTransferObject(converter = BeanConverter. class )
public class User {
@RemoteProperty
private String welcome;
@RemoteProperty
private String username;
@RemoteProperty
private String address;
@RemoteProperty
private List < Book > books;
@RemoteProperty
private int age;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this .address = address;
}
public int getAge() {
return age;
}
public void setAge( int age) {
this .age = age;
}
@RemoteMethod
public String getUsername() {
return username;
}
public void setUsername(String username) {
this .username = username;
}
public String getWelcome() {
return welcome;
}
public void setWelcome(String welcome) {
this .welcome = welcome;
}
@RemoteMethod
public List < Book > getBooks() {
return books;
}
public void setBooks(List < Book > books) {
this .books = books;
}
@RemoteMethod
public User getUser(String welcome) {
this .welcome = welcome;
return this ;
}
}
@RemoteProxy:标注要给远程调用的类.
RemoteProxy的name设置创造出来的对象的名字,creator指定使用那种创造器,例子中使用SpringCreator.creatorParams指定创造器的其他参数.不同的创造器参数是不同的.
@RemoteMethod:标注给远程调用的方法
4.修改beans.xml












其中p为spring2.0中提供的标签.
5.html页面
< html >
< head >
< title > SpringUserInfo.html </ title >
< script type ='text/javascript' src ='/DWRExample/dwr/interface/user.js' ></ script >
< script type ='text/javascript' src ='/DWRExample/dwr/engine.js' ></ script >
< script type ='text/javascript' src ='/DWRExample/dwr/util.js' ></ script >
< script type ="text/javascript" >
function test(){
user.getUser( " Hello " ,callback);
}
var cellFuncs = [
function (data) { return data.name; },
function (data) { return data.author; },
];
function callback(user){
// alert(user.books)
DWRUtil.setValue('result', " 欢迎你! " + " 姓名: " + user.username + " ,年龄: " + user.age + " ,住址: " + user.address);
DWRUtil.addRows('tableInfo',user.books,cellFuncs,
{ escapeHtml: false ,
rowCreator: function (options) {
var row = document.createElement( " tr " );
var index = options.rowIndex * 50 ;
row.style.color = " rgb( " + index + " ,0,0) " ;
return row;
},
cellCreator: function (options) {
var td = document.createElement( " td " );
var index = 255 - (options.rowIndex * 50 );
td.style.backgroundColor = " rgb( " + index + " ,255,255) " ;
td.style.fontWeight = " bold " ;
return td;
}
})
}
</ script >
</ head >
< body >
< input id ="jbutton" type ="button" value ="取得信息" onclick ="test()" />
< br >
< div id ="result" ></ div >< br >
< table border ="1" >
< thead >< tr >
< th > 书名 </ th >< th > 姓名 </ th >
</ tr ></ thead >
< tbody id ="tableInfo" >
</ tbody >
</ table >
</ body >
</ html >
其中使用了util.js中的一些函数.