在ajax调用和重定向到错误页面时处理异常

时间:2014-07-29 12:08:11

标签: ajax jsp spring-mvc

我有一个带有文本框,下拉列表和提交按钮的JSP页面。在第一个下拉列表的更改中,属于第二个下拉列表的项应该在dro down列表中动态填充。使用ajax调用我正在调用spring controller,我已经编写了逻辑来填充第二个下拉列表中的项列表。要求是我需要在spring控制器中处理异常,如果发生任何异常,则将整个页面重定向到错误页面,这是其他jsp页面。

javascript函数获取动态记录以填充第一个下拉列表更改时的第二个下拉列表记录。

function showSID(Id)
{
    var xmlHttp;  
    if (window.XMLHttpRequest)
    {
        xmlHttp= new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
        xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
    }
    var url = contextPath+"/getAllSID.htm?Id="+Id;
    xmlHttp.onreadystatechange = function() {
        handleServerResponse(xmlHttp);
    };
    xmlHttp.open("GET", url, true);
    xmlHttp.send(null);

    function handleServerResponse(xmlHttp)
    {   
       if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
       {

          if (xmlHttp.responseText != "null")
          {
             //handled the response..

                  }         
          }
       }   
    }

spring controller在第一个下拉列表更改时填充第二个下拉列表中的记录:

@RequestMapping(value = "/getAllSID", method = RequestMethod.GET)
public void getAllSIDs(HttpServletRequest request,
            HttpServletResponse response,
            @ModelAttribute SIDDTO dto, BindingResult beException,
            @RequestParam("SelectedList") String selList)
            throws IOException {
       try {
            SIDDTO dynamicData = myService.getSIDDynamicData();//Database call 
            //logic..
            response.setContentType("text");
            response.resetBuffer();
            response.getWriter().print(SID);
        }
      catch (Exception e) 
      {
          LOGGER.error("Exception occured", e);
      }
}

在上面的控制器中,myService.getSIDDynamicData()从数据库中检索数据,有时数据库可能已关闭或由于任何其他原因我可能会遇到一些异常。因此,当发生某些异常时,我必须重定向到myErrorPage.jsp。 我尝试过使用response.sendRedirect(“/ myErrorPage.jsp”);但无法重定向到errorpage,可能是我的页面已经加载的原因,只有当我更改下拉控件点击上面的控制器并且由于页面已经加载它无法重定向到错误页面。请建议如何处理此场景中的异常,并在发生错误时重定向到JSP页面(错误页面)。谢谢。

1 个答案:

答案 0 :(得分:0)

考虑向Spring控制器添​​加异常处理程序方法。这是一个具有@ExceptionHandler注释的方法。在异常处理程序中,您可以将HTTP状态设置为合适的状态。例如:

 @ExceptionHandler(value = DataAccessException.class)
 public final void handleException(final DataAccessException exception,
       final HttpServletResponse response) {
    if (exception instanceof RecoverableDataAccessException
          || exception instanceof TransientDataAccessException) {
       response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
       response.setIntHeader("Retry-After", 60);
    } else {
       response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    }
 }