クラス ExceptionHandler
- 実装されたすべてのインターフェース:
FacesListener
、SystemEventListener
、EventListenerSE
- 既知の直属サブクラス
ExceptionHandlerWrapper
ExceptionHandler は、Faces ライフサイクル中にスローされる予期しない Exception
を処理するための中心点です。ExceptionHandler
は、アプリケーションの起動時またはシャットダウン時に発生する Exception
の通知を受けてはなりません。
デフォルト実装の要件については、Jakarta Faces Specification Document を参照してください。Exception
は、次の 2 つの方法のいずれかで ExceptionHandler
に渡すことができます。
Exception
がキャッチされない、またはキャッチされて再スローされることを保証することこのアプローチにより、Jakarta Faces Specification Document のセクション 6.2 "ExceptionHandler" で指定された
ExceptionHandler
機能がException
で動作できるようになります。システムイベント機能を使用して、
Exception
をラップするExceptionQueuedEvent
を公開します。このアプローチでは、
ExceptionQueuedEvent
を手動で公開する必要がありますが、Exception
に関する詳細情報をイベントに格納できます。次のコードは、これを行う方法の例です。//... } catch (Exception e) { FacesContext ctx = FacesContext.getCurrentInstance(); ExceptionQueuedEventContext eventContext = new ExceptionQueuedEventContext(ctx, e); eventContext.getAttributes().put("key", "value"); ctx.getApplication().publishEvent(ExceptionQueuedEvent.class, eventContext); }
このアプローチを使用する場合は
Exception
を再スローしてはならないため、ライフサイクル処理は通常どおり続行され、必要に応じてより多くのException
を公開できます。
どちらのアプローチでも、この方法で発行された ExceptionQueuedEvent
インスタンスは、Jakarta Faces Specification Document のセクション 6.2 "ExceptionHandler" で指定されているように、各ライフサイクルフェーズの最後に呼び出される handle()
メソッドにアクセスできます。
PhaseId.RENDER_RESPONSE
中に handle()
が呼び出された場合、回復オプションは他のフェーズ中に呼び出された場合よりも制限されることに注意してください。具体的には、RENDER_RESPONSE
中に NavigationHandler.handleNavigation(jakarta.faces.context.FacesContext, java.lang.String, java.lang.String)
を呼び出すことは無効です。
このクラスのインスタンスはリクエストスコープであり、FacesContextFactory.getFacesContext(java.lang.Object, java.lang.Object, java.lang.Object, jakarta.faces.lifecycle.Lifecycle)
が ExceptionHandlerFactory.getExceptionHandler()
を呼び出すことによって作成されます。
- 導入:
- 2.0
コンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明abstract ExceptionQueuedEvent
このハンドラーによって処理された最初のExceptionQueuedEvent
を返します。abstract IterableSE<ExceptionQueuedEvent>
abstract ThrowableSE
引数t
は、getClass()
がFacesException.class
またはjakarta.el.ELException.class
と等しくないオブジェクトに遭遇するまでアンラップします。abstract IterableSE<ExceptionQueuedEvent>
abstract void
handle()
Application().publishEvent(ExceptionQueuedEvent.class, eventContext)
の呼び出しによってキューに入れられたExceptionQueuedEvent
インスタンス内にあるException
インスタンスを処理するアクションを実行します。abstract boolean
isListenerForSource
(ObjectSE source) このリスナーインスタンスがsource
パラメーターによって参照されるインスタンスからのイベントの受信に関心がある場合にのみ、このメソッドはtrue
を返す必要があります。abstract void
processEvent
(SystemEvent exceptionQueuedEvent) 呼び出されると、リスナーは、特定のSystemEvent
サブクラスの javadoc で指定されたすべての保証が真であると想定できます。
コンストラクターの詳細
ExceptionHandler
public ExceptionHandler()
メソッドの詳細
handle
Application().publishEvent(ExceptionQueuedEvent.class, eventContext)
の呼び出しによってキューに入れられたExceptionQueuedEvent
インスタンス内に存在するException
インスタンスを処理するためのアクションを実行します。デフォルト実装の要件は、Jakarta Faces Specification Document のセクション 6.2.1「デフォルト ExceptionHandler 実装」で詳しく説明されています。- 例外:
FacesException
-Exception
を処理するアルゴリズムの実行中に問題が発生した場合に限り、処理されたException
自体を伝達する手段としてではありません。- 導入:
- 2.0
getHandledExceptionQueuedEvent
このハンドラーによって処理された最初の
ExceptionQueuedEvent
を返します。- 戻り値:
ExceptionQueuedEvent
のインスタンス。
getUnhandledExceptionQueuedEvents
handle()
メソッドでまだ処理されていないすべてのExceptionQueuedEvent
にIterable
を返します。- 戻り値:
- 未処理の
ExceptionQueuedEvent
のセット。
getHandledExceptionQueuedEvents
デフォルトの実装では、
handle()
メソッドで処理されたすべてのExceptionQueuedEvent
でIterable
を返す必要があります。- 戻り値:
- すべての
ExceptionQueuedEvent
上のIterable
processEvent
呼び出されると、リスナーは、特定の
SystemEvent
サブクラスの javadoc で指定されたすべての保証が真であると想定できます。- 次で指定:
- インターフェース
SystemEventListener
のprocessEvent
- パラメーター:
exceptionQueuedEvent
- 処理中のSystemEvent
インスタンス。- 例外:
AbortProcessingException
- このリクエストでライフサイクル処理を停止するかどうか。
isListenerForSource
このリスナーインスタンスが
source
パラメーターによって参照されるインスタンスからのイベントの受信に関心がある場合にのみ、このメソッドはtrue
を返す必要があります。- 次で指定:
- インターフェース
SystemEventListener
のisListenerForSource
- パラメーター:
source
- このリスナーインスタンスにイベントを送信することの適切性について問い合わせているソース。- 戻り値:
- 上記で指定された値
getRootCause
引数
t
は、getClass()
がFacesException.class
またはjakarta.el.ELException.class
と等しくないオブジェクトに遭遇するまでアンラップします。根本的な原因がない場合は、null
が返されます。- パラメーター:
t
- 渡されたラップされたThrowable
。- 戻り値:
- ラップされていないオブジェクト。
- 例外:
NullPointerExceptionSE
- 引数t
がnull
の場合。- 導入:
- 2.0