在dwr.xml配置文件中,allow的子标签convert标签用于配置DWR中参数传递中用到的非基本的对象类型。基本类型有数值型,字符串,简单数组等。如果配有javascript属性,则该对象类型可以显式地在所有用到DWR的JS代码里创建出来,如var sb = new StringBuffer();这样的代价就是所有用到DWR的页面都需要下载该对象的JAVASCRIPT构造函数(由DWR创建),增加了DWR生成的JS文件尺寸。而DWR生成的JS是动态生成的,无法被CACHE,所以性能影响颇大。如果不加javascript属性,可以用var sb = new Object()来实现该数据对象的创建,然后隐式地对属性进行赋值。
allow的子标签create标签用于配置公开的业务对象(或其中指定的函数接口),creator是spring表示用Spring的bean来提供业务对象,beanName参数(create下的param标签)指定具体bean的名字;creator是new时,表示用JAVA类默认构造函数来生成对象来实现DWR对方法的JAVASCRIPT转换,name属性通常为class,而对应值则是类的全路径。create下任意多个的include子标签用method属性指定公布成javascript函数的接口名字,如果没指定include,则默认所有public方法都会被公布成javascript函数,所以这会增加DWR创建的JS文件尺寸(基本每个函数多3-4行javascript代码)。
signatures标签用于声明公开的业务对象方法的调用细节,对DWR的转换目前没看出有什么影响。
<dwr>
<allow>
<convert converter="bean" match="java.lang.StringBuffer" javascript=”StringBuffer”/>
<create creator="new" javascript="ClassHelper" scope="request">
<param name="class" value="com.companya.projectb.ClassHelper"/>
</create>
<create creator="spring" javascript="HandlerImpl" >
<param name="beanName" value="handlerImpl"></param>
<include method="addStringBuffer"/>
</create>
</allow>
allow的子标签create标签用于配置公开的业务对象(或其中指定的函数接口),creator是spring表示用Spring的bean来提供业务对象,beanName参数(create下的param标签)指定具体bean的名字;creator是new时,表示用JAVA类默认构造函数来生成对象来实现DWR对方法的JAVASCRIPT转换,name属性通常为class,而对应值则是类的全路径。create下任意多个的include子标签用method属性指定公布成javascript函数的接口名字,如果没指定include,则默认所有public方法都会被公布成javascript函数,所以这会增加DWR创建的JS文件尺寸(基本每个函数多3-4行javascript代码)。
signatures标签用于声明公开的业务对象方法的调用细节,对DWR的转换目前没看出有什么影响。
<dwr>
<allow>
<convert converter="bean" match="java.lang.StringBuffer" javascript=”StringBuffer”/>
<create creator="new" javascript="ClassHelper" scope="request">
<param name="class" value="com.companya.projectb.ClassHelper"/>
</create>
<create creator="spring" javascript="HandlerImpl" >
<param name="beanName" value="handlerImpl"></param>
<include method="addStringBuffer"/>
</create>
</allow>
<signatures>
<![CDATA[
import java.util.List;
import java.lang.StringBuffer;
HandlerImpl.addStringBuffer(List<StringBuffer>, String[][], boolean );
]]>
</signatures>
</dwr>
<![CDATA[
import java.util.List;
import java.lang.StringBuffer;
HandlerImpl.addStringBuffer(List<StringBuffer>, String[][], boolean );
]]>
</signatures>
</dwr>
附DWR生成的JS样例:
projectb/dwr/interface/HandlerImpl.js
//如果StringBuffer有javascript属性声明,则下列构造函数存在。
if (typeof StringBuffer != "function") {
var StringBuffer = function() {
this.action = null;
this.id = null;
this.createTime = null;
this.lastModifiedTime = null;
}
}
// Provide a default path to dwr.engine
if (dwr == null) var dwr = {};
if (dwr.engine == null) dwr.engine = {};
if (DWREngine == null) var DWREngine = dwr.engine;
if (HandlerImpl == null) var HandlerImpl = {};
HandlerImpl._path = '/projectb/dwr';
//For every issued interface. 每个公布的接口方法调用。
pcaEmailHandler.addStringBuffer = function(p0, p1, p2, callback) {
dwr.engine._execute(pcaEmailHandler._path, 'pcaEmailHandler', 'addEmail', p0, p1, p2, p3, callback);
}
projectb/dwr/interface/HandlerImpl.js
//如果StringBuffer有javascript属性声明,则下列构造函数存在。
if (typeof StringBuffer != "function") {
var StringBuffer = function() {
this.action = null;
this.id = null;
this.createTime = null;
this.lastModifiedTime = null;
}
}
// Provide a default path to dwr.engine
if (dwr == null) var dwr = {};
if (dwr.engine == null) dwr.engine = {};
if (DWREngine == null) var DWREngine = dwr.engine;
if (HandlerImpl == null) var HandlerImpl = {};
HandlerImpl._path = '/projectb/dwr';
//For every issued interface. 每个公布的接口方法调用。
pcaEmailHandler.addStringBuffer = function(p0, p1, p2, callback) {
dwr.engine._execute(pcaEmailHandler._path, 'pcaEmailHandler', 'addEmail', p0, p1, p2, p3, callback);
}
本文转自 dannyy1026 51CTO博客,原文链接:
http://blog.51cto.com/dannyyuan/338229