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

针对请求:

(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层事例代码如下:

	@JSON
	public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值