2

私のコードが例外をスローすると、毎回ではなく、jsf が空白のページを表示することがあります。レイアウトに facelets を使用しています。このSun フォーラムの投稿で同様のエラーが報告されましたが、回答はありません。同じ問題を抱えている人、または解決策を持っている人はいますか? ;)

いくつかのリクエストにより。詳細は次のとおりです。

web.xml

 <error-page>
        <exception-type>com.company.ApplicationResourceException</exception-type>
        <location>/error.faces</location>
 </error-page>

そして、jsf に関連するスタックは、実際の例外の後に出力されます。

####<Sep 23, 2008 5:42:55 PM GMT-03:00> <Error> <HTTP> <comp141> <AdminServer> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1222202575662> <BEA-101107> <[weblogic.servlet.internal.WebAppServletContext@6d46b9 - appName: 'ControlPanelEAR', name: 'ControlPanelWeb', context-path: '/Web'] Problem occurred while serving the error page.
javax.servlet.ServletException: viewId:/error.xhtml - View /error.xhtml could not be restored.
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:249)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
    at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:525)
    at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:261)
    at weblogic.servlet.internal.ForwardAction.run(ForwardAction.java:22)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.servlet.internal.ErrorManager.handleException(ErrorManager.java:144)
    at weblogic.servlet.internal.WebAppServletContext.handleThrowableFromInvocation(WebAppServletContext.java:2201)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2053)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
javax.faces.application.ViewExpiredException: viewId:/error.xhtml - View /error.xhtml could not be restored.
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:180)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)

私はjsfバージョンを使用してMojarra 1.2_09richfaces 3.2.1.GAます facelets 1.1.13.

いくつかの助けを願っています:(

4

3 に答える 3

3

これはJSFの実装に大きく依存すると思います。空白の画面が表示されるものがあると聞きました。

私たちが使用していたものは、スタックトレースでエラー500をスローします。その他のタイムアウトボタンは、ユーザーにとってエラーなしでは機能しません。これはすべて私たちの開発段階でした。

しかし、私があなたに与えることができる最善のアドバイスは、例外をキャッチしてエラーログに記録し、後でデバッグするためのスタックトレースを取得することです。バックエンドが失敗するなど、何もできなかったメッセージの場合、画面に表示されるFacesContextに致命的なメッセージを追加し、スタックトレースをログに記録します。

于 2008-09-23T21:15:56.983 に答える
1

今日、私のerror.jspページで同様の問題を修正しました。これはあなたのものとまったく同じではありませんが、誰かが同様の問題を抱えている場合、正しい方向に向けるかもしれません. 私の問題は、2 つの異なるソースから発生しているように見えました。

まず、message例外プロパティが、エラー ページによって捕捉された例外をスローしていた一部のサーブレットで設定されていませんでした。サーブレットは、コンストラクターを使用して例外をキャッチし、再スローしていServletException(Throwable rootCause)ました。

次に、エラー ページ自体で、元の作成者はスクリプトレット コードを使用してメッセージを解析していましString.split(message, ";");null。エラーログにNullPointerException「エラーページの提供中に問題が発生しました」というメッセージが表示されていました。

これら 2 つのことが組み合わさって、元の例外をスローしていたサーブレットの URL に空白のページが表示されました。コンストラクターを使用してサーブレットで例外を再スローするときに独自のエラー メッセージを提供することで問題を解決したServletException(String message, Throwable rootCause)ため、エラー メッセージはもはやnull. error.jspまた、スクリプトレット コードの代わりに EL を使用してページを書き直しましたが、厳密には必要ありませんでした。

于 2011-02-11T18:28:02.200 に答える
-1

JSF 2 の空白ページの場合、ExceptionHandlerWrapper.handleこのメソッドをオーバーライドするクラスまたはクラスにブレークポイントを配置します。私の場合、制限が厳しすぎるカスタムコードが原因で、エラーはログに記録されませんでした。

于 2013-01-04T14:59:45.623 に答える