读书人

Dwr错误处理

发布时间: 2012-10-16 09:57:37 作者: rapoo

Dwr异常处理

今天在弄dwr的异常处理,想把java后台的异常信息,在浏览器展示出来,原来没处理这块,导致dwr一直报Error错误,也不知道是什么错,需要后台翻日志,现在改造了一下,终于把异常的堆栈信息加载到前台了。

?

Dwr在异常处理的时候,有很多种方式,全局的方式,部分函数的方式,具体的写—wr的官方网站上有说(http://directwebremoting.org/dwr/documentation/browser/errors.html),这里就不介绍了。

?

我这里用的是全局的方法,机配置一个全局的异常处理函数。如果java后台不做处理的话,那么Dwr的全局函数,只能显示你在Exception里写的消息,不在Exception里的消息,是无法显示出来的,这就对我们排错造成困难。

?

因此我对后台的异常信息作了处理,让java抛出的异常信息都记录下来

?

代码如下(客户端):

?

function errorHander(msg,ex){if(QH_LOADMASK){QH_LOADMASK.hide();}var errorMsg = "系统堆栈:\n"+msg;var stackMsg = "";var programMsg = '程序堆栈:\n--------------------------------\n';var continueCount = 0;for(var j=0; j<ex.stackTrace.length; j++){var obj = ex.stackTrace[j];stackMsg += "at "+ obj.className+"."+obj.methodName+"("+obj.fileName+" "+obj.lineNumber+")\n";}if(stackMsg != ""){Ext.Msg.show({title:'错误堆栈',//msg:"",//defaultTextHeight:500,width :900,icon:Ext.Msg.ERROR,buttons:Ext.Msg.OK,prompt:true,multiline:450,value:errorMsg+"\n"+programMsg +stackMsg,maxWidth:900});}}//配置DWR异常处理的全局处理函数DWREngine.setErrorHandler(errorHander);

?服务端:

public int saveOrUpdateRecords(List records) throws DAOException {try {return (Integer)super.getHibernateTemplate().execute(new BatchSoUCallback(records));} catch (DataAccessException ex) {String msg = ExceptionStackTracePaser.paserStactTrace(ex);throw new DAOException("DataAccessException:" + msg);}}

?

public class ExceptionStackTracePaser {/** * 描述:解析异常信息的堆栈信息,并将其转换为字符串 * @param ex * @return * 返回值:String */public static final String paserStactTrace(Exception ex){ByteArrayOutputStream outputStream = new ByteArrayOutputStream();PrintStream stream = new PrintStream(outputStream);ex.printStackTrace(stream);return ex.getMessage()+"\r\n"+outputStream.toString();}}

?这样在前台就可以抓住其他部分的异常信息了。

?

注:ByteArrayOutputStream?用的是apache commons 的io包里面的类

读书人网 >Web前端

热点推荐