写自己第一个正确的DWR例子

 最近因为项目的原因,在学习DWR技术,这是一个有趣的AJAX框架技术,下面以例子来实现dwr的一个简单的例子,如下:

//这是一个简单的只保持用户名和密码的userVo类 public class AdminUserVo { private String name; private String pwd; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } //它的操作类 public class UserOperater { public String save(AdminUserVo adminUserVo){ System.out.println("内部登录"); return "用户名为:"+adminUserVo.getName()+"密码"+adminUserVo.getPwd(); } }

<!-- DWR的配置文件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> <init></init> <allow> <!-- vo --> <convert match="com.teedry.vo.AdminUserVo" converter="bean"/> <create creator="new" javascript="userOperator" > <param name="class" value="com.teedry.voimpl.UserOperater"/> <include method="save"/> </create> </allow> </dwr> <!-- 页面上的代码adminUser.jsp --> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'adminUser.jsp' starting page</title> <mce:script type='text/javascript' src="/dwr/dwr/interface/userOperator.js" mce_src="dwr/dwr/interface/userOperator.js"></mce:script> <mce:script type='text/javascript' src="/dwr/dwr/interface/service.js" mce_src="dwr/dwr/interface/service.js"></mce:script> <mce:script type='text/javascript' src="/dwr/dwr/engine.js" mce_src="dwr/dwr/engine.js"></mce:script> <mce:script type='text/javascript' src="/dwr/dwr/util.js" mce_src="dwr/dwr/util.js"></mce:script> <mce:script type="text/javascript"><!-- function check(){ var userVo = new Object(); userVo.name = userForm.name.value; //useVo对象保存的字段名必须和AdminUserVo.java中的字段保持一致 userVo.pwd = userForm.pwd.value; alert(userVo.name); userOperator.save(userVo,OKHandle,errorHandle); } function OKHandle(data){ alert(data); } function errorHandle(error){ alert(error); } // --></mce:script> </head> <body> <form method="post" action="" name="userForm" id="userForm"> <input type="text" name="name" maxlength="10"/> <input type="password" name="pwd" maxlength="6"/> <input type="button" value="确定" onclick="check();"/> </form> </body> </html>

在上面的例子中,需要注意的是:

 

配置文件的allow部分定义哪些类可以建立和转换,每个被准许的类都可以有一个'create'或者'convert'配置行.下面列出的类的转换在默认情况下不需要进一步的设置.

  1、所有基本类型,boolean,int,double等等

  2、基本类型的对象形式实现的类,Boolean,Integer等等

  3java.lang.String

  4java.util.date 和三个SQL形式的派生类

  5、以上所有类型的数组形式

  6、以上所有类型的集合,List,Set,Map(有些局限性)

默认的时候DWRjava void值转换成javascriptnull值就是这样设置<convert converter="null" match="void"/>. 有时java.lang.Void也需要进行这样的转换,所以设置也是相似的<convert converter="null" match="java.lang.Void"/>.java中传递null值到javascript是没有任何危险性的,所以DWR将这个作为默认的converter,所以你自己不用再把这个converter添加到配置文件的<allow>部分中去.

基本类型的converter转换int,boolean,double.当然还包括对应的对象形式Integerv,Boolean等等.DWR中在allow预定义了16个配置项目分别用于所有基本类型的转换.就象这样<convert converter="primitive" match="java.lang.Long"/><convert converter="primitive" match="long"/>.

String类型和Date同样预先定义了Converter,这些converter都没有办法进行改变的,所有的String,Date和数值类型都统一采用默认的converter.

-------如果你在参数中传入JAVASCRIPT中的是一个对象类型,则需要转换成javascript支持的Bean类型,如:

 <!-- vo -->
 <convert match="com.teedry.vo.AdminUserVo" converter="bean"/>

 

WR已经默认定义和初始化了常用的Converter,他们分别如下:<converter id="null" class="uk.ltd.getahead.dwr.convert.NullConverter"/> <converter id="primitive" class="uk.ltd.getahead.dwr.convert.PrimitiveConverter"/> <converter id="bignumber" class="uk.ltd.getahead.dwr.convert.BigNumberConverter"/> <converter id="string" class="uk.ltd.getahead.dwr.convert.StringConverter"/> <converter id="date" class="uk.ltd.getahead.dwr.convert.DateConverter"/> <converter id="array" class="uk.ltd.getahead.dwr.convert.ArrayConverter"/> <converter id="map" class="uk.ltd.getahead.dwr.convert.MapConverter"/> <converter id="collection" class="uk.ltd.getahead.dwr.convert.CollectionConverter"/> <converter id="bean" class="uk.ltd.getahead.dwr.convert.BeanConverter"/> <converter id="hibernate" class="uk.ltd.getahead.dwr.convert.HibernateBeanConverter"/> <converter id="dom" class="uk.ltd.getahead.dwr.convert.DOMConverter"/> <converter id="dom4j" class="uk.ltd.getahead.dwr.convert.DOM4JConverter"/> <converter id="jdom" class="uk.ltd.getahead.dwr.convert.JDOMConverter"/> <converter id="xom" class="uk.ltd.getahead.dwr.convert.XOMConverter"/> <converter id="servlet" class="uk.ltd.getahead.dwr.convert.ServletConverter"/>    

 

 

 

你可能感兴趣的:(写自己第一个正确的DWR例子)