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 --------------------编程问答-------------------- 我测试时,能跳转到error函数里,但是全局异常根本就没有拦截到这个错误 这个问题好蛋疼。。。在顶顶 看看有没有人遇到过哇 --------------------编程问答-------------------- 你查看ajax返回的数据就知道怎么回事了,它会直接返回你全局错误页面的html字符串
补充:Java , Java EE