在engine.js中常用的方法有
DWREngine.setErrorHandler(function)对错误的处理
DWREngine.setWarningHandler(function)对警告的处理
DWREngine.setTimeout() 设置超时的时间
DWREngine.setAsync(false);设置DWR为同步调用
DWREngine.setAsync(true);设置DWR为异步调用
异常转换器
我们在服务器端写业务逻辑的时候,通常会利用try{}catch{}捕获异常,但是现在对于前台调用后台的业务逻辑,我们如果在后台发生了一些异常,在前台如何让他显示出来,这里dwr为我们提供了一种转换器(Exception转换器),但是这种转换器如果我们不显示的表现出来,它会默认的给我们提供一个error的异常出来,后台报的异常会在前台以error的方式给我们显示,但是不会吧详细的信息暴露出来,所以我们需要自己配置error的转换器,然后把需要的异常信息给显示出来。举例:
服务端
public class ErrDemo {
public String getData() {
Date when = new Date();//FunkyException extend Exception
throw new FunkyException("异常的详细信息", when);
//FunkyException 实现getWhen() method
}
}
客户端
function eh(msg, ex) {
alert(msg + ", date=" + ex.when);
}
DWREngine.setErrorHandler(eh);
ErrDemo.getData(function(data) { alert("123"); });
结果是跳出的对话框中包含"异常的详细信息, date=Mon Jan 01 2008 10:00:00 GMT+0100"
运行调用打印Error。就是dwr框架给我们指定的,如果我们后台访问的时候发生异常,前台为我们的提示信息就为Error,相当于这些普遍的异常都会以Error的形式给我们显示。
如果我们现在不想要Error,我们想要知道前台给我们报的错误是针对后台哪一个异常,我们就需要这个异常转换器来给我们指定这种异常的转换,然后把这种异常信息捕获到前台,前台给我们打印出来,这就要用到dwr给我们提供的内置的转换器,在dwr.xml里面配置:
<convert match="com.ryanlu.exception.FunkyException" converter="exception">
<param name="include" value="message"/>
</convert>
只要配置了这种异常处理转换器,后台发生异常,前台就可以给我们打印出来.运行结果:"异常的详细信息, date=Mon Jan 01 2008 10:00:00 GMT+0100"。这说明通过配置异常处理转换器,在前台可以捕获后台发生的异常,而且是详细的异常信息。
因为Ajax含义中的"A"就是指的 asynchronous(异步),那么每个Demo.Method执行都是在异步
情况下完成的.如果要指定全局的超时设置那么就可以通过DWREngine.setTimeout()来完成
同样的道理,DWREngine.setErrorHandler(function),DWREngine.setWarningHandler(function)
用来设置全局的错误和警告处理
当然如果想要只针对某一个function来进行超时/警告/错误处理的话也是可以的
如下:
Demo.method(params, {
callback:function(data) { alert("it worked"); },
errorHandler:function(message) { alert("it broke"); },
timeout:1000
});
注意:callback和errorHandler是engine.js里面的变量。用来处理异常。这样写的好处是,如果正常执行会调用callback函数,如果发生异常会调用exceptionHander函数来处理。注意callback和errorHandler必须按照上面的方式来写,这是engine.js里面规定的。