クラス 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 voidhandle()Application().publishEvent(ExceptionQueuedEvent.class, eventContext)の呼び出しによってキューに入れられたExceptionQueuedEventインスタンス内にあるExceptionインスタンスを処理するアクションを実行します。abstract booleanisListenerForSource(ObjectSE source) このリスナーインスタンスがsourceパラメーターによって参照されるインスタンスからのイベントの受信に関心がある場合にのみ、このメソッドはtrueを返す必要があります。abstract voidprocessEvent(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