public abstract class ExceptionHandler extends ObjectSE implements SystemEventListener
ExceptionHandler は、Faces ライフサイクル中にスローされる予期しない Exception を処理するための中心点です。ExceptionHandler は、アプリケーションの起動時またはシャットダウン時に発生する Exception の通知を受けてはなりません。
デフォルトの実装の要件については、仕様書を参照してください。Exception は、次の 2 つの方法のいずれかで ExceptionHandler に渡されます。
Exception がキャッチされない、またはキャッチされて再スローされることを保証すること
このアプローチにより、仕様書のセクション 6.2 で指定されている 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 インスタンスは、仕様書のセクション 6.2 で指定されているように、各ライフサイクルフェーズの最後に呼び出される 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() を呼び出すことによって作成されます。
| コンストラクターと説明 |
|---|
ExceptionHandler() |
| 修飾子と型 | メソッドと説明 |
|---|---|
abstract ExceptionQueuedEvent | getHandledExceptionQueuedEvent() このハンドラーによって処理された最初の |
abstract IterableSE<ExceptionQueuedEvent> | getHandledExceptionQueuedEvents() デフォルトの実装では、 |
abstract ThrowableSE | getRootCause(ThrowableSE t) 引数 |
abstract IterableSE<ExceptionQueuedEvent> | getUnhandledExceptionQueuedEvents()
|
abstract void | handle()
|
abstract boolean | isListenerForSource(ObjectSE source) このリスナーインスタンスが source パラメーターによって参照されるインスタンスからのイベントの受信に関心がある場合にのみ、このメソッドは true を返す必要があります。 |
abstract void | processEvent(SystemEvent exceptionQueuedEvent) 呼び出されると、リスナーは、特定の SystemEvent サブクラスの javadoc で指定されたすべての保証が真であると想定できます。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEpublic abstract void handle()
throws FacesExceptionApplication().publishEvent(ExceptionQueuedEvent.class, eventContext) の呼び出しによってキューに入れられた ExceptionQueuedEvent インスタンス内にある Exception インスタンスを処理するためのアクションを実行します。デフォルトの実装の要件は、仕様書のセクション 6.2.1 で詳しく説明されています。
FacesException - Exception を処理するアルゴリズムの実行中に問題が発生した場合に限り、処理された Exception 自体を伝達する手段としてではありません。public abstract ExceptionQueuedEvent getHandledExceptionQueuedEvent()
このハンドラーによって処理された最初の ExceptionQueuedEvent を返します。
ExceptionQueuedEvent のインスタンス。public abstract IterableSE<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents()
handle() メソッドでまだ処理されていないすべての ExceptionQueuedEvent に Iterable を返します。
ExceptionQueuedEvent のセット。public abstract IterableSE<ExceptionQueuedEvent> getHandledExceptionQueuedEvents()
デフォルトの実装では、handle() メソッドで処理されたすべての ExceptionQueuedEvent で Iterable を返す必要があります。
ExceptionQueuedEvent 上の Iterable public abstract void processEvent(SystemEvent exceptionQueuedEvent) throws AbortProcessingException
呼び出されると、リスナーは、特定の SystemEvent サブクラスの javadoc で指定されたすべての保証が真であると想定できます。
SystemEventListener の processEvent exceptionQueuedEvent - 処理中の SystemEvent インスタンス。AbortProcessingException - このリクエストでライフサイクル処理を停止するかどうか。public abstract boolean isListenerForSource(ObjectSE source)
このリスナーインスタンスが source パラメーターによって参照されるインスタンスからのイベントの受信に関心がある場合にのみ、このメソッドは true を返す必要があります。
SystemEventListener の isListenerForSource source - このリスナーインスタンスにイベントを送信することの適切性について問い合わせているソース。public abstract ThrowableSE getRootCause(ThrowableSE t)
引数 t は、getClass() が FacesException.class または jakarta.el.ELException.class と等しくないオブジェクトに遭遇するまでアンラップします。根本的な原因がない場合は、null が返されます。
t - 渡されたラップされた Throwable。NullPointerExceptionSE - 引数 t が null の場合。Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.