`
aokunsang
  • 浏览: 813060 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DWR学习(配置文件以及其他工具js的详解)

    博客分类:
  • dwr
阅读更多

一、 简单的说说dwr.xml的配置文件、dwr.xml的大致如下【实例】:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
    "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
    "http://getahead.org/dwr/dwr20.dtd">
<dwr>
    <init>
    	<converter id="..." class="..."/>
    	<creator id="..." class="..."/>
    </init>
	<allow>
	   <convert match="com.aokunsang.dwr.bean.PersonBean" converter="bean"></convert>
	   <create javascript="getPerson" creator="new">
	   	  <param name="class" value="com.aokunsang.dwr.server.DwrServer"></param>
	      <include method="print"/>
	      <include method="getLength"/>
	      <include method="getAllPerson"/>
	   </create>
	</allow>
	<signatures>
		<![CDATA[
			import java.util.List;
			getPerson.getLength(List<String> list);
		]]>
	</signatures>
</dwr>

 1、<init>   大多数情况下你不需要使用这个标签,因为默认的dwr.xml已经为我们提供了很多常用的creator和converter,详细内容可参见dwr.jar中的org.directwebremoting包中的dwr.xml文件,

  <init>
    <creator id="jsf" class="org.directwebremoting.faces.JsfCreator"/>
    <creator id="none" class="org.directwebremoting.create.NullCreator"/>
    <creator id="new" class="org.directwebremoting.create.NewCreator"/>
    <creator id="pageflow" class="org.directwebremoting.beehive.PageFlowCreator"/>
    <creator id="spring" class="org.directwebremoting.spring.SpringCreator"/>
    <creator id="script" class="org.directwebremoting.create.ScriptedCreator"/>
    <creator id="struts" class="org.directwebremoting.struts.StrutsCreator"/>
    <creator id="ejb3" class="org.directwebremoting.create.Ejb3Creator"/>

    <converter id="null" class="org.directwebremoting.convert.NullConverter"/>
    <converter id="enum" class="org.directwebremoting.convert.EnumConverter"/>
    <converter id="primitive" class="org.directwebremoting.convert.PrimitiveConverter"/>
    <converter id="bignumber" class="org.directwebremoting.convert.BigNumberConverter"/>
    <converter id="string" class="org.directwebremoting.convert.StringConverter"/>
    <converter id="array" class="org.directwebremoting.convert.ArrayConverter"/>
    <converter id="map" class="org.directwebremoting.convert.MapConverter"/>
    <converter id="collection" class="org.directwebremoting.convert.CollectionConverter"/>
    <converter id="date" class="org.directwebremoting.convert.DateConverter"/>
    <converter id="dom" class="org.directwebremoting.convert.DOMConverter"/>
    <converter id="dom4j" class="org.directwebremoting.convert.DOM4JConverter"/>
    <converter id="jdom" class="org.directwebremoting.convert.JDOMConverter"/>
    <converter id="xom" class="org.directwebremoting.convert.XOMConverter"/>
    <converter id="servlet" class="org.directwebremoting.convert.ServletConverter"/>
    <converter id="bean" class="org.directwebremoting.convert.BeanConverter"/>
    <converter id="object" class="org.directwebremoting.convert.ObjectConverter"/>
    <converter id="hibernate2" class="org.directwebremoting.hibernate.H2BeanConverter"/>
    <converter id="hibernate3" class="org.directwebremoting.hibernate.H3BeanConverter"/>
    <converter id="url" class="org.directwebremoting.convert.URLConverter"/>
    <converter id="exception" class="org.directwebremoting.convert.ExceptionConverter"/>
    <converter id="miniException" class="org.directwebremoting.convert.MinimalistExceptionConverter"/>
  </init>

 这种方式很像Java中的import语句。多数类需要在使用前先import一下,但是import的类并不表明这个类已经被使用了

2、<convert>

      a、match属性是bean或者你需要转换的某种Java类型的全类名;

      b、converter属性就是你要转换的类型。详见dwr.jar中的org.directwebremoting包中的dwr.xml文件中的<init>,

      c、还有一个param属性,针对不同的converter,param参数不同。如:

<convert match="com.aokunsang.dwr.bean.PersonBean"converter="bean">
   <param name="exclude或者include" value="property1, property2" />
</convert>

 该标签的意思是:包含或者不包含bean中的哪些属性、

3、<create>

     a、creator属性使用什么样的构造器创造类的实例,默认为new。还有null[不创建对象],可能的原因有:调用该类的方法是静态方法,dwr调用创建器之前先检查一下该方法是否为静态。详见dwr.jar中的org.directwebremoting包中的dwr.xml文件中的<init>。

     b、javascript属性在浏览器里给你创建的对象命名,避免使用JavaScript保留字、

 这个名字与导入的js名字一致,

	<script type="text/javascript" src="<%=path%>/dwr/interface/getPerson.js"></script>
	<script type="text/javascript" src="<%=path%>/dwr/engine.js"></script>

 还有在js中调用service类中的方法时的名字也要一致。

function printPerson(){
		person = {};
		person.name = "jack";
		person.age = "12";
		person.gender = "男";
		getPerson.print(person,{callback:function(data){alert(data);}})
	}

 

function getCount(){
		var arr = new Array();
		arr[0]=12;
		arr[1]=11;
		arr[2]=14;
		getPerson.getLength(arr,{callback:function(data){alert(data);}})
	}

     c、param指定创建器的参数,不同的创建器参数不同。

     d、include、exclude:include包含哪些方法,其他的不包含,默认该类中的方法全部包含。exclude反之、

4、<signatures>

DWR使用反射机制在转换过程中找到它应该使用的类型。有时候类型的信息无法获得【如泛型,dwr2.0引入了泛型】,在这种情况下你要在此处用方法签名给予暗示。

经测试,如果你的泛型为简单类型,如String,Integer等。<signatures>不写可以正常运行,不过控制台会有警告提示,上篇博文中的实例就可以不写【大家可以试试】。

有一些数据类型不需要我们import,如:String,Map等,详见dwr.jar中的org.directwebremoting包中的dwr.xml文件中的<allow>、

 

二、 再了解一下dwr的工具js,engine.js、

它有很多方法,在这里只说个别常用的、

 1、DWREngine.setXXX  设置全局变量,如:DWREngine.setTimeout(3000);

      也可以设置局部的超时时间:如调用回调函数时,可以以对象的形式设置超时,

function getCount(){
		var arr = new Array();
		arr[0]=12;
		arr[1]=11;
		arr[2]=14;
		getPerson.getLength(arr,
		{
		 callback:function(data){alert(data);},
		 timeout:3000
		 })
	}

 2、DWREngine.beginBatch()和DWREngine.endBatch();这两个方法是同时出现的,如果没有endBatch(),则所有的远程调用都会一直出于队列中。

功能:用来批量执行远程调用来减少反应时间。DWREngine.endBatch()可以设置超时,如:DWREngine.endBatch({timeout:3000});

3、顺序调用DWREngine.setOrdered(Boolean),默认为false、因为Ajax是异步调用,所以远程调用不会按照一定的顺序返回结果,如果你设置了setOrdered(true),dwr将严格按照发送的顺序返回结果,即:DWR会在旧的请求安全无误的返回结果后才会发送新的请求、

【个人建议】:设置为true时,如果一个请求丢失,那么浏览器将会一直处于等待该请求的返回而没有反应、会大大降低你的应用程序的速度,所以在使用之前要考虑好后果,三思而后行、

 

后续:对于util.js没有了解,大致看了一下,感觉它和jquery一样,对html页面的一些操作,个人感觉还是Jquery使用方便,有空了再看看dwr提供的util.js。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics