如何处理Richfaces中的代码错误500

时间:2010-07-29 14:10:25

标签: jsf richfaces myfaces

我正在使用Richfaces 3.2.2并且需要在出现异常时向用户显示500错误页面。问题是,当我使用ajax事件时,我无法在出现异常时向用户显示500错误。我已经在web.xml上定义了错误页面。

原谅我的英语。有什么建议吗?

2 个答案:

答案 0 :(得分:4)

检查RichFaces developer guide章5.10.1。

  

5.10.1 Request Errors Handling

     

要在Ajax请求期间发生错误时在客户端上执行自己的代码,有必要重新定义标准的“A4J.AJAX.onError”方法:

A4J.AJAX.onError = function(req, status, message){
    window.alert("Custom onError handler "+message);
}
     

以这种方式定义的函数接受为参数:

     
      
  • req - 一个调用错误的请求的参数字符串
  •   
  • status - 服务器返回的错误编号
  •   
  • message - 给定错误的默认消息
  •   
     

因此,可以创建自己的处理程序,该处理程序在超时,内部服务器错误等时调用。

因此,要显示服务器生成的错误响应,您需要执行以下操作:

A4J.AJAX.onError = function(req, status, message){
    document.open();
    document.write(req.responseText);
    document.close();
}

重定向到错误页面,请按以下步骤操作:

A4J.AJAX.onError = function(req, status, message){
    window.location = 'error.jsf';
}

您只需要将强制性错误详细信息作为请求参数传递,或者让服务器端将其存储在Odelya建议的会话中。

相关问题:

答案 1 :(得分:2)

由于您使用的可能是JSF1.2而不是JSF2,因此可以使用FaceletViewHandler来处理异常。

public class CustomViewHandler extends FaceletViewHandler {
    ...
    @Override
    protected void handleRenderException(FacesContext context, Exception ex) throws IOException, ELException,
        FacesException {
        try {
            ..

            getSessionMap().put("GLOBAL_ERROR", ex);
            getHttpResponseObject().sendRedirect("/error.jsf");
        } catch (IOException e) {
            log.fatal("Couldn't redirect to error page", e);
        }
    }
}

当然,您需要在bean中处理它,只需从会话中提取异常:

Throwable ex = (Exception) getSessionMap().remove("GLOBAL_ERROR");