我有一個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的錯誤處理和異常顯示。我認爲他們中的一個應該是可能的。
我遠離這個項目現在不能(唐不想)測試,但由於您花時間回答問題,所以您贏得了獎勵:) – mist 2012-03-06 15:21:32