【问题标题】:handle the exception while ajax call and redirect to error page在ajax调用时处理异常并重定向到错误页面
【发布时间】:2014-09-20 19:16:32
【问题描述】:

我有一个带有文本框、下拉列表和提交按钮的 JSP 页面。在第一个下拉列表更改时,属于第二个下拉列表的项目应在下拉列表中动态填充。使用 ajax 调用我正在调用 spring 控制器,我已经编写了逻辑来填充第二个下拉列表中的项目列表。要求是我需要在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..

                  }         
          }
       }   
    }

弹簧控制器在第一个下拉列表更改时填充第二个下拉列表中的记录:

@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");但无法重定向到错误页面,可能是因为我的页面已经加载,并且只有当我更改下拉控件点击上面的控制器并且页面已经加载时,它才能重定向到错误页面。请建议如何处理这种情况下的异常,并在发生错误时重定向到 JSP 页面(错误页面)。谢谢。

【问题讨论】:

标签: ajax jsp spring-mvc


【解决方案1】:

考虑向您的 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);
    }
 }

【讨论】:

  • 我尝试了这种方法,但由于页面已经加载而无法成功,并且我调用控制器只是为了在第一个下拉列表更改时加载下拉列表,它没有指向错误上述控制器中发生任何异常时的页面--@Raedwald。
猜你喜欢
  • 2013-04-11
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多