2

私は 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つが可能であるべきだと思います。

4

1 に答える 1

3

web.xmlを介して構成を行うことができると思います:

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

エラーコードにも使用できます..

于 2012-02-29T18:47:55.223 に答える