当前位置:编程学习 > JAVA >>

struts2与ajax的全局异常错误处理问题

现实需要要用$.ajax向后台传送复杂形式的数据,所以$.post不能满足需求

例如:
$.ajax({
url:"customerAction_getById.action",
data:"{'cid':1,'ids':[2,3,4,5]}",
type:"POST",
success:function(data){
alert("success");
},
contentType:"application/json",
error:function(){
alert("error");
}
});

所以在sruts配置文件中需要配置JSONInterceptor拦截器,同时配置struts的全局异常处理:

<package name="customer" namespace="/" extends="json-default">
   <result-types>
   <result-type name="json" class="org.apache.struts2.json.JSONResult"></result-type>
   </result-types>
<!-- 处理复杂形式数据的拦截器 -->
   <interceptors>
   <interceptor-stack name="ajaxStack">
   <interceptor-ref name="json"></interceptor-ref>
   <interceptor-ref name="defaultStack"></interceptor-ref>
   </interceptor-stack>
   </interceptors>
   <default-interceptor-ref name="ajaxStack"></default-interceptor-ref>
  
   <!-- 处理struts2与ajax统一错误处理的拦截器  -->
   <global-results>
   <result name="errHandler" type="chain">
   <param name="actionName">errorProcessor</param>
   </result>
   </global-results>
   <global-exception-mappings>
   <exception-mapping result="errHandler" exception="java.lang.Exception"></exception-mapping>
   </global-exception-mappings>
   <action name="errorProcessor" class="cn.hibernate.web.action.ErrorProcessor">
   <result type="json">
   <param name="root">action</param>
   <param name="errorCode">500</param>
   </result>
   </action>
   <action name="customerAction_*" method="{1}" class="customerAction">
   <result type="json">
   <param name="root">action</param>
   </result>
   </action>
   </package>


异常处理ErrorExceptin如下:

package cn.hibernate.web.action;

import net.sf.json.JSONObject;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.json.annotations.JSON;

import com.opensymphony.xwork2.ActionSupport;

public class ErrorProcessor extends ActionSupport {

private static final long serialVersionUID = 1L;

private Exception exception;
private String error;
public String getError() {
return error;
}

@JSON(serialize=false)
public Exception getException() {
return exception;
}

public void setException(Exception exception) {
this.exception = exception;
}

@Override
public String execute() throws Exception {

//设置后台出错状态码
ServletActionContext.getResponse().setStatus(500);
error = exception.getMessage();
return SUCCESS;
}
}


Action如下:

package cn.hibernate.web.action;

import javax.annotation.Resource;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.json.annotations.JSON;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import cn.hibernate.domain.Customer;
import cn.hibernate.service.CustomerService;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@Controller("customerAction")
@Scope("prototype")
public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{
private static final long serialVersionUID = 1L;
private int cid;
private long[] ids;

@Resource(name="customerService")
private CustomerService customerService;

@JSON(serialize=false)
public  String getById(){
customerService.getById(cid);
// ActionContext.getContext().getValueStack().push(this);
System.out.println(ids);
// ServletActionContext.getResponse().setStatus(500);
int i=5/0;
return SUCCESS;
}

public void setCid(int cid) {
this.cid = cid;
}

public long[] getIds() {
return ids;
}

public void setIds(long[] ids) {
this.ids = ids;
}

public int getCid() {
return cid;
}

private Customer model=new Customer();
@JSON(serialize=false)
public Customer getModel() {
return model;
}
}



测试发现,JSONInterceptor不起作用了,难道拦截器之间有冲突了??哪位大神帮我看下,困扰许久了 全局异常处理  --------------------编程问答-------------------- 或者 说说 怎么处理ajax和struts的全局错误处理问题   是不是太晚了啊  都没人了 --------------------编程问答-------------------- 遇到差不多的问题,在用ajax传递数据,在对应的action方法中特地抛出异常,但是全局异常拦截器没反应。。。。。。。。。。。。。。。。。。 --------------------编程问答-------------------- http://bbs.csdn.net/topics/380133780 --------------------编程问答--------------------
引用 3 楼 BeardedJ 的回复:
http://bbs.csdn.net/topics/380133780
我测试时,能跳转到error函数里,但是全局异常根本就没有拦截到这个错误  这个问题好蛋疼。。。在顶顶  看看有没有人遇到过哇 --------------------编程问答-------------------- 你查看ajax返回的数据就知道怎么回事了,它会直接返回你全局错误页面的html字符串
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,