2010-07-29 35 views
3

我正在使用Richfaces 3.2.2,並且在出現異常時需要向用戶顯示500錯誤頁面。問題是,當我使用ajax事件時,當出現異常時,我無法向用戶顯示500錯誤。我已經在web.xml中定義了錯誤頁面。如何處理Richfaces中的代碼錯誤500

對不起我的英語。有什麼建議嗎?

回答

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); 
     } 
    } 
} 
當然

,你需要處理它的豆,只是從會話中提取例外:

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

謝謝你,你的解決方案工作。 – imrabti 2010-07-30 08:55:16

+0

不客氣。請用低於1的V(綠色)標記我的答案 – Dejell 2010-07-30 12:14:40

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 - 的請求的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建議。

相關問題: