0

我使用 jquery post 方法调用save方法DepartmentAction,如果我保存一个 dup 部门(db 中不允许 dup 部门),该save方法会引发异常,但用户无法从页面获取任何有关它的信息,这是我的代码:

部门动作类:

public class DepartmentAction extends ActionSupport{
  public String save() throws Exception
   {
    this.departmentService.save(this.dept);
    this.jsonResult = "success";
    return "save";
  }
 }

struts.xml:

<package name="backstage-default" extends="ecs-default" namespace="/manager">
   <action name="dept_*" class="com.nader.action.DepartmentAction" method="{1}">
      <result name="save" type="json"><param name="root">jsonResult</param></result>
   </action>

 <global-results>
        <result name="error">/error.jsp</result>
    </global-results>

    <global-exception-mappings>
        <exception-mapping exception="java.lang.Exception" result="error"         />
    </global-exception-mappings>

测试.jsp:

     $.post('dept_save.do', 
                 {'dept.deptId':$("#dialog_dept_deptId").val(), 
                  'dept.deptName':$("#dialog_dept_deptName").val(),
                  'dept.manager':$("#dialog_dept_manager").val(),
                 },function(data, status, xhr){
                     alert(status);
                     if(status == 'success'){
                         alert('success:'+data);
                         $("#dialog-form").dialog("close");
                         getCountByAJAX();
                         getDeptByAJAX();
                     }else{
                         alert('error:'+data);
                     }
                  }
                 ,"json").fail(function(data, status, xhr)          {alert('fail:'+data);});

save抛出异常时,用户没有得到任何信息,没有错误,没有重定向,那我该怎么办?我不想try catch在Actions里写block,因为太多了,让代码乱七八糟。还有其他一些方法吗?

提前致谢。

ps:真的很抱歉,我刚刚贴错了javascript块,我更正了,现在fail处理程序在struts2抛出异常时执行,但我不知道data传递给浏览器的是什么,我看到dept_save.dochrome的响应tools,里面包含了所有的exceptionStack信息,太多了,struts能不能返回一些小信息或者友情提示信息?

4

1 回答 1

1

我不想在 Actions 中写 try catch 块,因为它太多让代码乱七八糟。

那是无稽之谈。当您使用的框架的组件可能抛出异常时,如果您想保持对程序流的控制而不是让它仅仅因错误而中断,则必须捕获这些异常。

(当然,您不必在此处捕获该异常,而且异常也可以在程序流的后期捕获。它们只需要在程序结束之前的某个地方被捕获即可。)

于 2013-03-21T10:47:54.797 回答