質問

コードが例外をスローすると、毎回ではありませんが、jsf で空白のページが表示されることがあります。レイアウトにはフェイスレットを使用しています。同様のエラーがここで報告されました 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_09, richfaces 3.2.1.GA そして facelets 1.1.13.

助けてください:(

役に立ちましたか?

解決

これは JSF 実装に大きく依存すると思います。一部の製品では空白の画面が表示されると聞いています。

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

しかし、私ができる最善のアドバイスは、例外をキャッチしてエラー ログに記録し、後でデバッグできるようにスタック トレースを残すことです。バックエンドの障害など、どうすることもできないメッセージの場合は、画面に表示される FacesContext に致命的なメッセージを追加し、スタック トレースを記録するだけです。

他のヒント

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

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top