在我的项目中使用了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方法,我想问问大家,你们的项目中遇到这个问题是怎么处理的?

解决方案 »

  1.   

    我们项目中:业务逻辑启用事务 然后抛到Action Action根据抛出的异常类型或返回结果来输出不同的错误信息(XML或JSON)
    没有你那样的处理正常返回:0代表成功1代表什么2代表什么....根据不同的数字调用预定义信息输出到客户端(HTML或XML或JSON)
    如果抛出了异常则根据异常信息来调用预定义的错误信息输出
      

  2.   

    你可以用Spring的aop界面技术, 监控抛出的异常,并对你需要进行做处理的异常进行捕获,做相应处理
      

  3.   

    哦 楼上的意思是否是将错误提示封装起来,然后当做成功的信息返回给XmlHttpReuqest,比如是一段html或者json等等,然后再前台success方法中判断一下,比如if(!json.exception){do sth},然后就知道是有异常了?
      

  4.   

    2楼的,能不能给个具体例子,现在即使我用AOP捕获了能怎么样啊?前台XmlHttpRequest能获得到么?1楼的哥们说是个办法,我们之前讨论的就是类似的结果,但是我希望struts2能有一种机制像DWR一样,只输出错误信息。。比如alert("不能删除这个用户");
      

  5.   

    恩 差不多就是这个意思。保证Jquery.ajax调用success:function(){}
      

  6.   

    恩,我刚才试了下,基本上可行。多谢楼上的哥们了。
    顺便说一下,不知道这个东西Struts2有更好的支持,我认为在现在Struts2对异常的处理上只要将http status改变为非200值(返回错误的值,比如500),那么Ajax就可以去调用error方法了,那样岂不是更好的处理了这个问题么,也许http status和业务等无关,理论上不应该有一些更改。