最近项目使用jquery+strtus2的交互方式。之前对于传值和异常处理没有统一的规范,现在整理了一下感觉清晰很多,记录下来。
首先是ACTION方法
/**
* 获取角色列表JSON
* @Methods Name getRoleListJson
* @Create In May 26, 2011 By lee void
*/
public void getRoleListJson(){
String json = null;
try{
HttpServletRequest request = super.getRequest();
QueryParam queryParam = HttpUtils.requestParam2QueryParam(request);
json = roleService.getRoleListJson(queryParam);
log.debug("RoleAction_getRoleListJson:write:"+json);
}catch(Exception e){
json = JsonUtils.errorJson(e.toString());
e.printStackTrace();
}
super.writeToResponse(json);
}
回写部分在Action基类做了一个writeToResponse方法的封装,避免重复代码
异常部分用自定义的JsonUtils.errorJson方法自动组装
这里返回total和rows是为了在给grid列表或下拉数据提供数据时避免解析异常准备的。
/**
* AJAX请求在ACTION层异常时返回的数据
* @Methods Name errorJson
* @Create In Aug 5, 2011 By lee
* @param error
* @return String
*/
public static String errorJson(String error){
return "{\"total\":0,\"rows\"[],\"success\":false,\"error\":\""+error+"\"}";
}
jquery部分因为使用了easyui中的dataGrid和form,所以有些返回需要加工,统一增加了异常处理的js代码.
首先对传值类型格式化,在共用js中设置jquery的AJAX请求
/** *全局AJAX请求设置 */ $.ajaxSetup({ type:'post', dataType:'json' });
这里看似用处不大,但在刚开始使用jquery的AJAX请求时经常没有声明dataType搞的各种返回值解析,代码处理相当混乱,统一之后风格一致好了一些。
然后是各种请求的异常处理,同样在共用js中封装了个异常处理的小方法(这里使用了easyui的messager)
//检查错误并弹出提示 function dc_checkError(data){ if(data.success==false){ $.messager.alert('错误',data.error,'error'); return; } }
把异常处理加到各种请求中
1.普通AJAX
$.ajax({ url : webContext + '/roleAction_saveRole.action', data :{ xxx:xxx }, success : function(data, textStatus) { dc_checkError(data); //成功逻辑 }, error : function(xhr, ts, et) { //失败逻辑 } });
2.form提交
$('#xxxForm').form('submit', { url:webContext + '/xxxAction_save.action?', success:function(data){ dc_checkError(data); //成功逻辑 } });
3.dataGrid数据装载
$('#dataGrid').datagrid({ title:'xxx', width:800, height:500, pageSize:ps, fit:true, rownumbers:true, url:webContext + '/xxxAction_getGridJson.action', columns:[[ {field:'id',title:'ID',checkbox:true,width:20}, {field:'name',title:'名称',width:100} ]], pagination:true, onLoadSuccess:function(data){ dc_checkError(data); } });