私は Facelets(JSF 1.2 (myfaces)) Web アプリを持っていて、エラー ページをカスタマイズしたいと考えています。その過程で本当に混乱しました。
私は以下を見つけました:
Facelets のエラー ページをカスタマイズする方法が見つかりません。テンプレートの場所がわかりません。sendRedirect() を実行する ViewHandler をオーバーライドすることで解決策を見つけました。これはコード、特に 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>
顔-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>
inを介してコンテナーのエラー処理を使用できることがわかりました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 ページに例外を表示できるようにしたい。それが不可能な場合は、myFaces のエラー処理を Exception の display で再度使用したいと思います。そのうちの1つが可能であるべきだと思います。