クラス ExceptionHandler
- java.lang.ObjectSE
-
- jakarta.faces.context.ExceptionHandler
- 実装されたすべてのインターフェース:
FacesListener
、SystemEventListener
、EventListenerSE
- 既知の直属サブクラス
ExceptionHandlerWrapper
public abstract class ExceptionHandler extends ObjectSE implements SystemEventListener
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
コンストラクターのサマリー
コンストラクター コンストラクター 説明 ExceptionHandler()
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 修飾子と型 メソッド 説明 abstract ExceptionQueuedEvent
getHandledExceptionQueuedEvent()
このハンドラーによって処理された最初のExceptionQueuedEvent
を返します。abstract IterableSE<ExceptionQueuedEvent>
getHandledExceptionQueuedEvents()
abstract ThrowableSE
getRootCause(ThrowableSE t)
引数t
は、getClass()
がFacesException.class
またはjakarta.el.ELException.class
と等しくないオブジェクトに遭遇するまでアンラップします。abstract IterableSE<ExceptionQueuedEvent>
getUnhandledExceptionQueuedEvents()
abstract void
handle()
Application().publishEvent(ExceptionQueuedEvent.class, eventContext)
の呼び出しによってキューに入れられたExceptionQueuedEvent
インスタンス内にあるException
インスタンスを処理するアクションを実行します。abstract boolean
isListenerForSource(ObjectSE source)
このリスナーインスタンスがsource
パラメーターによって参照されるインスタンスからのイベントの受信に関心がある場合にのみ、このメソッドはtrue
を返す必要があります。abstract void
processEvent(SystemEvent exceptionQueuedEvent)
呼び出されると、リスナーは、特定のSystemEvent
サブクラスの javadoc で指定されたすべての保証が真であると想定できます。
メソッドの詳細
handle
public abstract void handle() throws FacesException
Application().publishEvent(ExceptionQueuedEvent.class, eventContext)
の呼び出しによってキューに入れられたExceptionQueuedEvent
インスタンス内に存在するException
インスタンスを処理するためのアクションを実行します。デフォルト実装の要件は、Jakarta Faces Specification Document のセクション 6.2.1「デフォルト ExceptionHandler 実装」で詳しく説明されています。- 例外:
FacesException
-Exception
を処理するアルゴリズムの実行中に問題が発生した場合に限り、処理されたException
自体を伝達する手段としてではありません。- 導入:
- 2.0
getHandledExceptionQueuedEvent
public abstract ExceptionQueuedEvent getHandledExceptionQueuedEvent()
このハンドラーによって処理された最初の
ExceptionQueuedEvent
を返します。- 戻り値:
ExceptionQueuedEvent
のインスタンス。
getUnhandledExceptionQueuedEvents
public abstract IterableSE<ExceptionQueuedEvent> getUnhandledExceptionQueuedEvents()
handle()
メソッドでまだ処理されていないすべてのExceptionQueuedEvent
にIterable
を返します。- 戻り値:
- 未処理の
ExceptionQueuedEvent
のセット。
getHandledExceptionQueuedEvents
public abstract IterableSE<ExceptionQueuedEvent> getHandledExceptionQueuedEvents()
デフォルトの実装では、
handle()
メソッドで処理されたすべてのExceptionQueuedEvent
でIterable
を返す必要があります。- 戻り値:
- すべての
ExceptionQueuedEvent
上のIterable
processEvent
public abstract void processEvent(SystemEvent exceptionQueuedEvent) throws AbortProcessingException
呼び出されると、リスナーは、特定の
SystemEvent
サブクラスの javadoc で指定されたすべての保証が真であると想定できます。- 次で指定:
- インターフェース
SystemEventListener
のprocessEvent
- パラメーター:
exceptionQueuedEvent
- 処理中のSystemEvent
インスタンス。- 例外:
AbortProcessingException
- このリクエストでライフサイクル処理を停止するかどうか。
isListenerForSource
public abstract boolean isListenerForSource(ObjectSE source)
このリスナーインスタンスが
source
パラメーターによって参照されるインスタンスからのイベントの受信に関心がある場合にのみ、このメソッドはtrue
を返す必要があります。- 次で指定:
- インターフェース
SystemEventListener
のisListenerForSource
- パラメーター:
source
- このリスナーインスタンスにイベントを送信することの適切性について問い合わせているソース。- 戻り値:
- 上記で指定された値
getRootCause
public abstract ThrowableSE getRootCause(ThrowableSE t)
引数
t
は、getClass()
がFacesException.class
またはjakarta.el.ELException.class
と等しくないオブジェクトに遭遇するまでアンラップします。根本的な原因がない場合は、null
が返されます。- パラメーター:
t
- 渡されたラップされたThrowable
。- 戻り値:
- ラップされていないオブジェクト。
- 例外:
NullPointerExceptionSE
- 引数t
がnull
の場合。- 導入:
- 2.0