在我的项目中使用了Struts2+json-plugin+jQuery的方式进行Ajax通讯,但是对于自定义异常的显示没有什么好的解决方式。
$.ajax({
type:"post",
url:"xxxaction!deleteXXX",
dataType:"text",
data: {
id: chkrows
},
success: function(e) {
alert("删除数据成功");
},
error:function(xmlhttp,textStatus, errorThrown) {
alert("删除数据失败:" + 这里是自定义异常信息);
}
}); xxxaction的deleteXXX方法
public String deleteXXX() throws Exception {
logger.debug("删除XXXID为:" + XXX)
throw new BusinessException("不能删除");
return "success";
}
配置文件就是正常的
<action name="XXXAction" class="XXX">
<result type="json"></result>
</action> 现在情况是如果在Tomcat下那么返回的是一段HTML,也就是我们经常看到的Tomcat报错的那个页面。
如果在Struts2中进行异常处理,设置一个比如global-exception进行处理,那么返回的就是Struts2的异常处理页面HTML。并且这个时候Ajax调用是成功的方法,不调用error方法,我想问问大家,你们的项目中遇到这个问题是怎么处理的?
$.ajax({
type:"post",
url:"xxxaction!deleteXXX",
dataType:"text",
data: {
id: chkrows
},
success: function(e) {
alert("删除数据成功");
},
error:function(xmlhttp,textStatus, errorThrown) {
alert("删除数据失败:" + 这里是自定义异常信息);
}
}); xxxaction的deleteXXX方法
public String deleteXXX() throws Exception {
logger.debug("删除XXXID为:" + XXX)
throw new BusinessException("不能删除");
return "success";
}
配置文件就是正常的
<action name="XXXAction" class="XXX">
<result type="json"></result>
</action> 现在情况是如果在Tomcat下那么返回的是一段HTML,也就是我们经常看到的Tomcat报错的那个页面。
如果在Struts2中进行异常处理,设置一个比如global-exception进行处理,那么返回的就是Struts2的异常处理页面HTML。并且这个时候Ajax调用是成功的方法,不调用error方法,我想问问大家,你们的项目中遇到这个问题是怎么处理的?
没有你那样的处理正常返回:0代表成功1代表什么2代表什么....根据不同的数字调用预定义信息输出到客户端(HTML或XML或JSON)
如果抛出了异常则根据异常信息来调用预定义的错误信息输出
顺便说一下,不知道这个东西Struts2有更好的支持,我认为在现在Struts2对异常的处理上只要将http status改变为非200值(返回错误的值,比如500),那么Ajax就可以去调用error方法了,那样岂不是更好的处理了这个问题么,也许http status和业务等无关,理论上不应该有一些更改。