2012-05-22 48 views
2

我正在使用Primefaces進行ajax提交,但我無法鏈接服務器端消息和我的ajax請求。 假設我有這個按鈕來調用一個動作。 在我的託管bean中,是否需要引發異常?如何將此消息傳入我的ajax請求通過AJAX請求鏈接服務器端消息/異常

public void checkout(ActionEvent event){ 
    if(expression){ 
     throw new CustomException("Account balance is not enough!"); 
    } 
} 

public class CustomException extends RuntimeException { 
    public CustomException(String message) { 
     super(message); 
    } 
} 

我該如何處理這種情況?我的onerror javascript方法能夠處理這個問題嗎?

此外,在一種情況下,假設數據庫已關閉,那麼如何處理異常?我是否在我的javascript函數中訪問了錯誤消息 ?

public void checkout(ActionEvent event){ 
    try{ 
     //DB is down 
     if(expression){ 
      throw new CustomException("Account balance is not enough!"); 
     } 
    }catch(Exception e){ 

    } 
} 

回答

4

至於你的具體問題,你需要實現自定義ExceptionHandler這其中確實基本上時異常在一個Ajax請求發生以下:

String errorPageLocation = "/WEB-INF/errorpages/500.xhtml"; 
context.setViewRoot(context.getApplication().getViewHandler().createView(context, errorPageLocation)); 
context.getPartialViewContext().setRenderAll(true); 
context.renderResponse(); 

這不正是平凡如果你想考慮web.xml錯誤頁面。您需要解析整個web.xml,才能找到錯誤頁面位置。 OmniFaces實用程序庫正好具有這樣的異常處理程序,即FullAjaxExceptionHandler。您可以找到完整的源代碼here和展示示例here

至於你的具體功能需求,當只有用戶錯誤時,我不會拋出異常。這是完全可以恢復的。您需要創建並添加一個FacesMessage並擁有一個AJAX來更新<h:messages>,<p:messages><p:growl>。 PrimeFaces支持一個autoUpdate="true",它會根據ajax請求自動更新自己。例如。

context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Insufficient balance", null)); 

<p:messages autoUpdate="true" /> 

拋出異常使得只有在像當數據庫是不可恢復的下降的情況下感。請注意,你通常不會自己拋出這樣的例外。在JPA的情況下,它已經被拋出爲PersistenceException,你反過來不應該抓住JSF託管bean,而是放手。

+3

爲什麼你知道這麼多東西? Err..Just開玩笑。謝謝總是...... :) –

相關問題