extjs和struts2配合使用时的异常处理思路,仅供参考

来源:互联网 发布:初级编程教学视频教程 编辑:程序博客网 时间:2024/05/29 09:16

针对请求:

(1)页面跳转请求 ,struts2配置事例如下:

    <action name="warningSMSIndex" class="warningSMSAction" method="warningSMSIndex">     <result name="success">index_warningSMS.jsp</result>    </action>
(2)json请求,struts2配置事例如下:
    <action name="queryWarningSMSList" class="warningSMSAction" method="queryWarningSMSList">     <result name="success" type="json"/><result name="error" type="json" />    </action>

这里面的json是自己写的插件,会将strus2的所有属性返回到前台,属性中会包含success,isException,message等


针对返回情况:

(1)请求成功,返回success

(2)请求出现业务异常,在程序中需要处理,action层事例代码如下:

@JSONpublic String updateWarningSMS(){try{warningSMSService.updateWarningSMS(warningSMSVo ); return this.returnSuccess();}catch(WarningSMSException e){return this.returnError(e);} }


(3)请求出现系统异常,即无法预知的异常,由strus2的ExceptionInteceptor拦截器处理,处理思路如下

        1.如果是页面跳转的请求,会将异常信息转换成html,在前台直接显示

        2.如果是json请求,通过@json注解来判断,会将异常信息转换成json格式


extjs前台的处理:

            Ext.Ajax.request({            scope: this,              url:url,            waitMsg: '正在保存...',             params : form.getValues(),            success: function( res,form) {                    Ext.ux.Toast.msg('提示', '保存成功');                    this.getWindow().down("grid[itemId=grd1]").getStore().load();                 },                exception:function( res,form){                  var json= Ext.decode(res.responseText);                  Ext.ux.Toast.msg('业务异常', json.message,'error', 4000);                },                unknownException: function(res, form) {                var json= Ext.decode(res.responseText);                 Ext.ux.Toast.msg('系统异常', json.message,'error', 4000);                }            });

这里不是原生的extjs的代码,而是通过加工,加工思路如下:

1.如果正常返回会调用success方法

2.如果出现业务异常,会掉excetion方法

3.如果出现未处理的异常,会调用unknownException方法

核心代码如下,仅供参考

if(contentType.toLowerCase()=='application/json;charset=utf-8') {
            var json = Ext.decode(response.responseText);
            if(json) {
                //业务执行成功
                if (json.success && !json.isException) {
                    Ext.callback(options.success, options.scope, [response, options]);
                //业务异常
                } else if (!json.success && !json.isException) {
                    Ext.callback(options.exception, options.scope, [response, options]);
                //未知异常
                } else if (!json.success && json.isException) {
                    if(json.stackTrace && json.stackTrace.indexOf("UserNotLoginException") > 0) {
                        BI.exception.MessageBox.showGoLoginWin();
                        return;
                    }
                    if(json.errorCode == BI.CONFIG.SECURITY_NOTALLOW) {
                        Ext.ux.Toast.msg('', json.message, 'error');
                    }
                    Ext.callback(options.unknownException, options.scope, [response, options]);
                }
            }
        }

个人感言:

我是做个c/s开发的出身的,在c/s开发中处理异常很简单,在application中有一个error事件,会自动捕捉异常,但是在b/s开发下却需要自己来设计,曾经想过,在service层抛出RuntimeException异常,在action曾通过e.getmessage()将异常信息获取出来,然后返回到前台,但是这样一来没所有异常都返回到前台,而我们在开发的时候应该只关注业务异常,这个思路特别好,今天使用了公司的框架,这个框架对异常处理非常好,所以分享出来,由于是公司的框架,不方便把所有代码都贴出来,只提供一个思路,还请谅解



0 0
原创粉丝点击