NutzCN Logo
分享 利用动作链统一处理异常返回视图
发布于 2574天前 作者 忧郁深蓝 2160 次浏览 复制 上一个帖子 下一个帖子
标签:

做项目时需对项目内异常信息进行处理,在nutz论坛摸索了1天,也没发现有谁分享过一个完整的示例,我这边分享一个动作链处理的方法,有不足的地方还望大家能够一起交流下;
首先是动作链的配置文件

var chain={
    "default" : {
        "ps" : [
              "org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor",
              "org.nutz.mvc.impl.processor.EncodingProcessor",
              "org.nutz.mvc.impl.processor.ModuleProcessor",
              "org.nutz.mvc.impl.processor.ActionFiltersProcessor",
              "org.nutz.mvc.impl.processor.AdaptorProcessor",
              "com.paul.nutz.processor.PaulFailProcessor",
              "org.nutz.mvc.impl.processor.MethodInvokeProcessor",
              "org.nutz.mvc.impl.processor.ViewProcessor"
              ],
        "error" : 'org.nutz.mvc.impl.processor.FailProcessor'
    }
};

不要问我为什么要放在MethodInvokeProcessor前面,我也不清楚,是看论坛里兽总回答后尝试的,没办法,基础有点差。
下面是类
/**
* 拦截所有的异常信息,转换后输入到页面
* @author PAUL GAO
*
*/
public class PaulFailProcessor extends AbstractProcessor {

public void process(ActionContext ac) throws Throwable {
    Msg msg = null;
    try{
        doNext(ac);
    }catch(BizException e){
        msg = ExceptionBulider.handelException(e);
    }catch(Exception e){
        msg = Msg.error("网络错误,请刷新后重试!");
    }
    if (ReqUtils.isAjax(ac.getRequest())) {
        ac.getResponse().addHeader("loginStatus", "paramsDenied");
        ReqUtils.rendAjaxResp(ac.getRequest(), ac.getResponse(), msg);
    }else{

//这里是像页面设置一个对象,里面是提示信息;
ac.getRequest().setAttribute("obj", msg);
new ForwardView("/501.jsp").render(ac.getRequest(), ac.getResponse(), null);
}
return;
}
}
然后是工具类

public class ReqUtils {
	public static String AjaxEncode = Encoding.UTF8;
	public static boolean isAjax(ServletRequest req) {
	    String value = ((HttpServletRequest)req).getHeader("X-Requested-With");
        if (value != null && "XMLHttpRequest".equalsIgnoreCase(value.trim())) {
            return true;
        }
		return false;
	}
    public static void rendAjaxResp(ServletRequest req, ServletResponse resp, Object re) {
		try {
			if (AjaxEncode != null)
				((HttpServletResponse)resp).setCharacterEncoding(AjaxEncode);
			new UTF8JsonView(JsonFormat.compact()).render((HttpServletRequest)req, (HttpServletResponse)resp, re);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

工具类是抄袭nutzwk项目里的;
JSP页面是直接放在webRoot目录下的,用的是myeclipse开发工具;
页面怎么搞就随便你了。

0 回复
添加回复
请先登陆
回到顶部