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, waitSE
public abstract void handle() throws FacesException
Application().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.