我正在使用Richfaces 3.2.2并且需要在出现异常时向用户显示500错误页面。问题是,当我使用ajax事件时,我无法在出现异常时向用户显示500错误。我已经在web.xml上定义了错误页面。
原谅我的英语。有什么建议吗?
答案 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");