パッケージ jakarta.faces.context

クラス ExceptionHandler

java.lang.ObjectSE
jakarta.faces.context.ExceptionHandler
実装されたすべてのインターフェース:
FacesListenerSystemEventListenerEventListenerSE
既知の直属サブクラス
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

      public ExceptionHandler()
  • メソッドの詳細

    • 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 で指定されたすべての保証が真であると想定できます。

      次で指定:
      インターフェース SystemEventListenerprocessEvent 
      パラメーター:
      exceptionQueuedEvent - 処理中の SystemEvent インスタンス。
      例外:
      AbortProcessingException - このリクエストでライフサイクル処理を停止するかどうか。
    • isListenerForSource

      public abstract boolean isListenerForSource(ObjectSE source)

      このリスナーインスタンスが source パラメーターによって参照されるインスタンスからのイベントの受信に関心がある場合にのみ、このメソッドは true を返す必要があります。

      次で指定:
      インターフェース SystemEventListenerisListenerForSource 
      パラメーター:
      source - このリスナーインスタンスにイベントを送信することの適切性について問い合わせているソース。
      戻り値:
      上記で指定された値
    • getRootCause

      public abstract ThrowableSE getRootCause(ThrowableSE t)

      引数 t は、getClass() が FacesException.class または jakarta.el.ELException.class と等しくないオブジェクトに遭遇するまでアンラップします。根本的な原因がない場合は、null が返されます。

      パラメーター:
      t - 渡されたラップされた Throwable
      戻り値:
      ラップされていないオブジェクト。
      例外:
      NullPointerExceptionSE - 引数 t が null の場合。
      導入:
      2.0