在DWR中,engine.js是用来转换动态生成接口的JavaScript函数,它是DWR的工作引擎,所以一个引用DWR应用的页面都要使用它。
<c:set var="base">
${pageContext.request.scheme}://
${pageContext.request.serverName}:${pageContext.request.serverPort}
${pageContext.servletContext.contextPath}
</c:set>
<script type="text/javascript" src="${base}/dwr/engine.js"></script>
可以通过dwr.engine.setX()函数来设置全局属性。例如:
dwr.engine.setTimeout(2000);
或者在单次调用级别上假设Remote被DWR暴露出来设置,例如:
Remote.singleMethod(params, {
callback: function(data) { /* code */ },
timeout: 2000
});
批量执行的属性
选项
|
说明
|
async
|
设置是否为异步调用。如果为true则为异步调用。
|
headers
|
在XHR调用中加入额外的头信息。
|
parameters
|
可以通过Meta-datarequest.getParameter()取得元数据。
|
httpMethod
|
选择GET或者POST。
|
rpcType
|
选择是使用xhr、iframe或者script-tag来实现远程调用。
|
timeout
|
设定超时时长,单位是ms。
|
可以通过使用batch来批量执行远程调用。这样可以减少与服务器的交互次数、提高程序的响应速度。一个batch调用以dwr.engine.beginBatch()开始,并以dwr.engine.endBatch()结束。当调用endBatch()后,就结束了本次批量远程调用,这样DWR在与服务器的一次交互中执行它们。例如:
dwr.engine.beginBatch();
Remote.methodInBatch1(params, callback1);
Remote.methodInBatch2(params, callback2);
dwr.engine.endBatch({timeout: 1000});
可以通过调用dwr.engine.setTimeout()来设置单次调用和批量调用级别的元数据选项的超时值。如果设置值为0(默认)可以将超时关闭。它的单位是毫秒。如果调用超时发生,错误处理器就会被调用。例如:
Remote.method(params, {
callback: function(data) { alert("进行远程调用"); },
errorHandler: function(msg) { alert("远程调用出错:" + msg); },
timeout: 2000
});
提示:如果把一些远程调用放在一起执行也会产生一些影响,例如不能在batch里执行同步调用。所有的元数据选项,例如hooks、timeout、errorHandler都是batch级别的,而不是单次调用级别上的,所以如果一个batch中有两个调用设置了不同的超时,除了最后一个起作用,其他的设置都被忽略。
在DWR中有一些选项用来控制远程调用的处理方式。
dwr.engine.setAsync(flag)
该选项指定XHR是否为异步调用,默认为true。如果使用的是IFrame或者ScriptTag,这一选项将被忽略。一般来说把它设置为false会使浏览器运行变慢。设置全局同步机制的方法为:
dwr.engine.setAsync(true);
设置成单次调用同步的方法为:
Remote.method(params, {
callback: function(data) {/* code */},
async: true
});
dwr.engine.setMethod(newmethod)
该选项用来设置新的方法。它不能保证使用选择的方法,它只是保证首先尝试使用那个方法。newmethod必须是dwr.engine.XMLHttpRequest、dwr.engine.IFrame或dwr.engine.ScriptTag。其中XMLHttpRequest是默认值。当ActiveX被禁时,可以使用IFrame,尽管DWR能自动检测出这种情况并切换到IFrame。当要突破跨域调用的限制时,就可以使用ScriptTag。例如,要设置全局的远程调用方法:
dwr.engine.setMethod(dwr.engine.IFrame);
设置成单次调用同步的方法为:
Remote.method(params, {
callback: function(data) {/* code */},
method: dwr.engine.IFrame
});
在batch里设置的方法为:
dwr.engine.beginBatch();
Remote.methodInBatch1(params, callback1);
Remote.methodInBatch2(params, callback2);
dwr.engine.endBatch({method: dwr.engine.IFrame});
dwr.engine.setVerb(verb)
该选项允许选择POST和GET方法,无论使用IFrame还是XMLHttpRequest方法,当一些浏览器不支持XHR-POST方法时,DWR就自动切换到GET,即使设置POST为verb,所以setVerb()应当被仅仅作为一个提示。如果使用ScriptTag来远程调用,没有verb的设置,例如,设置全局远程调用的verb方法为:
dwr.engine.setVerb("GET");
设置单次调用verb方法为:
Remote.method(params, {
callback: function(data) {/* code */},
verb: "GET"
});
在batch中调用verb的方法为:
dwr.engine.beginBatch();
Remote.methodInBatch1(params, callback1);
Remote.methodInBatch2(params, callback2);
dwr.engine.endBatch({verb: "GET"});
处理器及回调处理器的属性
选项 |
说明 |
errorHandler |
当出现错误时的动作。服务器端的异常通过exceptionHandler来处理。 |
warningHandler |
由于浏览器的bug引起问题时的动作,默认值设置为null(关闭)。 |
textHtmlHandler |
当得到不正常的text/html页面时的动作(通常表示超时)。 |
callback |
调用成功以后的要执行的回调函数,应该只有一个参数:远程调用得到的数据。 |
exceptionHandler |
远程调用失败的动作,一般是服务器端异常或者数据转换问题。 |
如果DWR远程调用失败,就会调用错误和警告handler并传递错误消息。可以用在alert()窗口或状态栏中来显示错误信息。也可以使用dwr.engine.setErrorHandler(function)来改变错误处理函数,同样通过dwr.engine.setWarningHandler(function)来改变警告处理方式。
Hooks的属性
选项 |
说明 |
preHook |
远程调用前执行的函数。 |
postHook |
远程调用后执行的函数。 |
可以通过调用dwr.engine.setPreHook(function)和dwr.engine.setPostHook(function)来设置远程Hooks,如果想在DWR调用之前显示一个提示,可以设置pre-hooks函数。它将会被调用,但是没有参数传递到这个函数。为防止一些按钮在调用期间被多次单击,可以使用一些按钮在调用期间不可用,可以应用pre-hooks这一功能。pre-hooks和post-hooks一起使用来逆转pre-hooks产生的一些改变。
全局选项
选项 |
说明 |
ordered |
DWR是否支持顺序调用。 |
pollType |
选择xhr或iframe的反转Ajax。 |
reverseAjax |
是否查找inbound调用。 |
onBackButton |
用户按了back按钮后的动作。 |
onForwardButton |
用户按了forward按钮的动作。 |
因为Ajax一般是异步调用,所以远程调用不会按照调用时发送的顺序返回。可通过用dwr.engine.setOrdered(boolean)来设置返回的结果严格按照发送时的顺序返回。DWR在上一个请求安全返回后才会发送下一个请求。DWR的默认值为false,表示不能保证远程调用不会按照调用时发送的顺序返回。
提示:把这个属性的值设置为true,会减慢应用程序的运行,如果一个消息丢失。浏览器就不会再响应,所以在使用这一功能之前需要综合考虑。
分享到:
相关推荐
dwr包.rar dwr.jar engine.js util.js dwr-noncla.jar readme.txt JAR File: dwr.jar (1.08Mb) To DWR enable your web-app WAR File: dwr.war (4.62Mb) Demos/Examples of what DWR can do Sources: dwr-...
DWR(包括engine.js+util.js).rar
dwr教程+dwr.jar+util.js+engine.js
开发Dwr所需的jar包,js文件:dwr.jar engine.js util.js
dwr javascript util.js engind.js 工具库 原js文件在dwr.jar中,不想找的同学就下载吧。
dwr框架中提供的engine.js的源码。
dwr20.dtd
DWR的各种版本Jar文件——dwr2.0.5.jar、dwr2.0.6.jar、dwr3.rc1.jar
dwr20.dtd约束文件。 <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd" >
dwr1.0 dwr2.0 js包 DwrEngine.js+DwrUtil.js
dwr 2.jar dwr 2.jar
DWR2.0 相关配置文件 DWR2.jar + DWR.xml + DWR2.0.dtd + Web.xml
NULL 博文链接:https://yxwang0615.iteye.com/blog/981848
dwr 例子 jar包 engine.jsutil.js 学习笔记 绝对超值。
dwr需要的js(searchaAuthor+engine.js+util.js).rar
dwr3.0.jar
这是dwr需要的engine.js和util.js,Engine.js与util.js不同之处在于,util.js是静态js文件,可以直接从jar文件中拿出来,页面可以直接引用;而engine.js则有部分动态内容,这决定了它必须经过servelt资源请求,在...
dwr30.dtd导入myeclipse后补全就出来了
最新dwr3.0的包,有需要的朋友就下载吧