2013-05-09 33 views
3

下面是一個例子按鈕,可以拋出異常:號碼:的commandButton不重定向時的ExternalContext#重定向()被調用

<h:commandButton value="save" update=":formTable:tableData"> 
    <f:setPropertyActionListener value="BTN_ONE" 
     target="#{tamplateTableBean.buttonSelected}" /> 
</h:commandButton> 

在我ExceptionHandler我:

FacesContext.getCurrentInstance().getExternalContext().redirect("error.xhtml"); 

當我使用<h:commandButton>(如上例)併發生異常,然後執行重定向並顯示錯誤頁面。 當我使用<p:commandButton>時,則不會發生重定向(即使執行了行redirect("error.xhtml")),並且它將保持在同一頁面上,就像沒有任何事情發生一樣。我的ExceptionHandler中捕獲到異常,但不顯示JSF錯誤頁面。

這是如何造成的,我該如何解決?

+2

技術的區別是,PrimeFaces按鈕發送一個ajax請求。 http://stackoverflow.com/questions/10449862/what-is-the-correct-way-to-deal-with-jsf-2-0-exceptions-for-ajaxified-components – BalusC 2013-05-09 13:59:47

回答

1

正如在鏈接iIn BalusC評論 - Omnifaces解決這個問題。我刪除我的ExcetionHandler實施和改變Omnifaces - >如文檔,我進口omnifaces.jar,添加到faces-config.xml中

<factory> 
    <exception-handler-factory> 
    org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory 
    </exception-handler-factory> 
</factory> 

,並在web.xml

<error-page> 
     <error-code>500</error-code> 
    <location>/faces/restricted/error.xhtml</location> 
</error-page> 

現在我趕上Ajax請求中的異常並重定向到錯誤頁面。 (提示:error.xhtml是facelet文件,並小心地把它放在正確的路徑)