我正在使用Richfaces 3.2.2,並且在出現異常時需要向用戶顯示500錯誤頁面。問題是,當我使用ajax事件時,當出現異常時,我無法向用戶顯示500錯誤。我已經在web.xml中定義了錯誤頁面。如何處理Richfaces中的代碼錯誤500
對不起我的英語。有什麼建議嗎?
我正在使用Richfaces 3.2.2,並且在出現異常時需要向用戶顯示500錯誤頁面。問題是,當我使用ajax事件時,當出現異常時,我無法向用戶顯示500錯誤。我已經在web.xml中定義了錯誤頁面。如何處理Richfaces中的代碼錯誤500
對不起我的英語。有什麼建議嗎?
由於您使用的可能是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);
}
}
}
當然
,你需要處理它的豆,只是從會話中提取例外:
Throwable ex = (Exception) getSessionMap().remove("GLOBAL_ERROR");
檢查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
- 的請求的PARAMS串調用一個n錯誤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建議。
謝謝你,你的解決方案工作。 – imrabti 2010-07-30 08:55:16
不客氣。請用低於1的V(綠色)標記我的答案 – Dejell 2010-07-30 12:14:40