2011-03-19 53 views
2

我有一個Facelets(JSF 1.2(myfaces))web應用程序,我想定製我的錯誤頁面 - 當應用程序成熟時,這似乎是很自然的事情。 我在這個過程中感到非常困惑。自定義Facelets錯誤頁面

我發現:

  • 我還沒有找到一種方法來定製Facelets的錯誤頁面。我還沒有找到模板的位置。我已經找到了解決方案,重寫ViewRandler,它將執行sendRedirect()。我認爲這應該是可以完成的,無需編寫代碼,特別是ViewHandler。

  • 我已經找到一種方法來關閉Facelets的錯誤處理和使用的MyFaces'一:

代碼:

<context-param> 
    <param-name>facelets.DEVELOPMENT</param-name> 
    <param-value>false</param-value> 
</context-param> 
<context-param> 
    <param-name>org.apache.myfaces.ERROR_HANDLING</param-name> 
    <param-value>true</param-value> 
</context-param> 
<context-param> 
    <param-name>org.apache.myfaces.ERROR_TEMPLATE_RESOURCE</param-name> 
    <param-value>/pages/public/errorPage.jsf</param-value> 
</context-param> 

似乎不幸的是我不能做的MyFaces找到一個JSF頁面。我需要使用jsf頁面,因爲我想使用網站的佈局,這些佈局通過幾個模板碎片化。 來源:http://wiki.apache.org/myfaces/Handling_Server_Errors

  • 我嘗試了戰斧溶液:

web.xml中:

<context-param> 
    <param-name>org.apache.myfaces.ERROR_HANDLING</param-name> 
    <param-value>true</param-value> 
</context-param> 

<context-param> 
    <param-name>org.apache.myfaces.ERROR_HANDLER</param-name> 
    <param-value>org.apache.myfaces.tomahawk.util.ErrorRedirectJSFPageHandler</param-value> 
</context-param> 

faces-config.xml中:

<navigation-rule> 
    <from-view-id>*</from-view-id> 
    <navigation-case> 
     <from-outcome>java.lang.Throwable</from-outcome> 
     <to-view-id>/pages/public/errorPage.xhtml</to-view-id> 
    </navigation-case> 
</navigation-rule> 

來源:http://wiki.apache.org/myfaces/Handling_Server_Errors

  • 我發現我可以通過<error-page>web.xml中使用容器的錯誤處理。我成功轉發到jsf錯誤頁面。這裏的問題是我無法顯示異常 - 我不知道如何。

更新:我發現瞭如何 - 一個ManagedBean:

public class ErrorDisplayBean { 
    public String getStackTrace() { 
     FacesContext context = FacesContext.getCurrentInstance(); 
     Map requestMap = context.getExternalContext().getRequestMap(); 
     Throwable ex = (Throwable) requestMap.get("javax.servlet.error.exception"); 
     ... 
    } 
} 

看到http://wiki.apache.org/myfaces/Handling_Server_Errors的代碼的其餘部分。

我想完成的事情:我想在不寫代碼的情況下使用Facelets的錯誤處理機制,並且能夠在jsf頁面上顯示Exception。如果這是不可能的,我想再次使用myFaces的錯誤處理和異常顯示。我認爲他們中的一個應該是可能的。

回答

3

我覺得你還是可以通過你的web.xml進行配置的:

<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/error.xhtml</location> 
</error-page> 

其中可用於錯誤代碼太..

+0

我遠離這個項目現在不能(唐不想)測試,但由於您花時間回答問題,所以您贏得了獎勵:) – mist 2012-03-06 15:21:32