2012-02-29 38 views
5

我只想在出現異常時在錯誤頁面上打印自定義消息。jsf中的異常處理 - 在新頁面中打印錯誤消息

我想這

if(erroroccured){ 
     FacesMessage message=new FacesMessage("You must login to continue"); 
     context.addMessage(null, message); 
     FacesContext.getCurrentInstance().getExternalContext().redirect("error.xhtml"); 

    } 

在error.xhtml我給

<h:messages></h:messages> 

標籤太..每當發生異常的網頁是否被完全重新定向。但我dint得到任何錯誤消息。

+0

可能重複:?如何顯示JSF我的應用程序的錯誤](http://stackoverflow.com/questions/315804/how-to-display-my-applications-errors-in-jsf) – oers 2012-02-29 10:51:09

+0

沒有它沒有,這個問題處理有關驗證錯誤信息,我問的異常處理,我需要重定向到另一個頁面打印我的自定義信息。但是,沒有重定向發生在那個問題......我在打印在同一頁面驗證消息沒有問題..問題主要存在於它似乎重定向.. – Karthikeyan 2012-02-29 11:17:26

回答

8

Faces消息是請求作用域。重定向基本上指示網頁瀏覽器發送全新的HTTP請求(這也是爲什麼您在瀏覽器地址欄中看到更改的URL)。在前一個請求中設置的消息當然在新請求中不再可用。

有幾種方法來得到它的工作:

  1. 不發送重定向。改爲發送前進。如果你已經在操作方法

    return "error"; 
    
  2. 創建一個常見的錯誤頁面的主模板,並使用單獨的模板客戶內部可以通過ExternalContext#dispatch()

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

    或只是導航通常的方式做到這一點而不是每個單獨的錯誤類型,並將消息放入視圖中。

    <ui:composition template="/WEB-INF/templates/error.xhtml" 
        xmlns="http://www.w3.org/1999/xhtml" 
        xmlns:ui="http://java.sun.com/jsf/facelets" 
    > 
        <ui:define name="message"> 
         You must login to continue. 
        </ui:define> 
    </ui:composition> 
    

    然後,你可以重新定向到這個特定的錯誤頁面,像這樣redirect("error-login.xhtml")

  3. 傳遞一些錯誤標識符作爲雖重定向URL像這樣redirect("error.xhtml?type=login")一個請求參數,並讓視圖處理。

    <h:outputText value="You must login to continue." rendered="#{param.type == 'login'}" /> 
    
  4. 將面部信息保留在閃光範圍中。

    externalContext.getFlash().setKeepMessages(true); 
    

    但是Mojarra有一個有點bug的Flash範圍實現。使用當前版本,當您需要重定向到其他文件夾時,這不起作用,但當目標頁面位於同一文件夾時它將起作用。

+0

現在一切工作正常,但笏此異常做.. '在提交響應後無法調用sendRedirect()。 – Karthikeyan 2012-03-01 05:09:34

+1

顯然一些其他的代碼調用鏈中進一步向下也調用'的sendRedirect()'(或'externalContext.redirect()',其在幕後委託給非常相同的方法)。你需要跳過那個電話。有關提示,請參閱此相關答案:http:// stackoverflow。COM /問題/ 2123514/JAVA琅IllegalStateException異常,不能進,後響應過氣-committe/2125045#2125045 – BalusC 2012-03-01 05:20:35