アノテーション型 ListenerFor
@RetentionSE(RUNTIMESE) @TargetSE(TYPESE) @InheritedSE @RepeatableSE(ListenersFor.class) public @interface ListenerFor
このアノテーションでタグ付けされたクラスは、メソッド
Application.subscribeToEvent(java.lang.Class<? extends jakarta.faces.event.SystemEvent>, java.lang.Class<?>, jakarta.faces.event.SystemEventListener)またはUIComponent.subscribeToEvent(java.lang.Class<? extends jakarta.faces.event.SystemEvent>, jakarta.faces.event.ComponentSystemEventListener)(状況に応じて、以下で説明)を使用してリスナーとしてインストールされます。デフォルトの実装では、このアノテーションを
UIComponentまたはRendererクラスにアタッチすることをサポートする必要があります。どちらの場合も、ここで説明するアノテーション処理は、Application.createComponent()のバリアントの実装中に開始する必要があり、UIComponentインスタンスがcreateComponent()から返される前に完了する必要があります。アノテーション処理は、意味的に次と同等のアルゴリズムに従って続行する必要があります。このアノテーションが問題のクラスに存在しない場合、アクションを実行する必要はありません。
subscribeToEventを呼び出す「ターゲット」を決定します。このアノテーションが付加されているクラスが
ComponentSystemEventListenerを実装し、UIComponentインスタンスである場合、「ターゲット」はUIComponentインスタンスです。このアノテーションが付加されているクラスが
ComponentSystemEventListenerを実装し、Rendererインスタンスである場合、「ターゲット」は、このRendererインスタンスによってレンダリングされるUIComponentインスタンスです。このアノテーションが付加されているクラスが
ComponentSystemEventListenerを実装し、RendererのインスタンスでもUIComponentのインスタンスでもない場合、実行されるアクションは指定されていません。この場合、いかなる種類のエラーも引き起こしてはなりません。このアノテーションが付加されているクラスが
SystemEventListenerを実装し、ComponentSystemEventListenerを実装していない場合、「ターゲット」はApplicationインスタンスです。呼び出す
subscribeToEvent()のバリアントと、それに渡すパラメーターを決定します。"target" が
UIComponentの場合、UIComponent.subscribeToEvent(Class, ComponentSystemEventListener)を呼び出し、最初の引数としてアノテーションのsystemEventClass()を渡し、2 番目の引数としてこのアノテーションがアタッチされているクラスのインスタンス(ComponentSystemEventListenerを実装する必要があります)を渡します。「ターゲット」が
Applicationインスタンスの場合、sourceClass()アノテーション属性値の値を調べます。値が
Void.classの場合は、Application.subscribeToEvent(Class, SystemEventListener)を呼び出し、systemEventClass()の値を最初の引数として渡し、このアノテーションが付加されているクラスのインスタンス(SystemEventListener) as the second argument.を実装する必要があります)を渡します。それ以外の場合は、
Application.subscribeToEvent(Class, Class, SystemEventListener)を呼び出し、systemEventClass()の値を最初の引数として、sourceClass()の値を 2 番目の引数として、このアノテーションが付加されているクラスのインスタンス(SystemEventListener) as the third argument.を実装する必要があります)を渡します。
サンプル:
jakarta.faces.resource.Stylesheetの標準レンダラーには、次のアノテーション宣言が必要です。@ListenerFor(systemEventClass=PostAddToViewEvent.class)これにより、レンダラーが
PostAddToViewEventのリスナーとして、レンダラーとしてリストされているすべてのコンポーネントに追加されます。- 導入:
- 2.0
必須定数のサマリー
必須要素 修飾子と型 必須要素 説明 ClassSE<? extends SystemEvent>systemEventClassこのクラスがリスナーとしてインストールされるシステムイベントの種類。
オプション要素の概要
オプション要素 修飾子と型 オプションの要素 説明 ClassSEsourceClasssystemEventClass()属性の値によって指定された型のイベントを発行するオブジェクトの種類。
要素の詳細
systemEventClass
ClassSE<? extends SystemEvent> systemEventClass
このクラスがリスナーとしてインストールされるシステムイベントの種類。実装は
Classでの完全一致のみをサポートし、サブクラスの関連を尊重してはなりません。式が予期された型のインスタンスに解決される限り、この属性の値に EL 式を含めることは有効です。- 戻り値:
- イベントクラス
sourceClass
ClassSE sourceClass
systemEventClass()属性の値によって指定された型のイベントを発行するオブジェクトの種類。式が予期された型のインスタンスに解決される限り、この属性の値に Jakarta Expression Language Expressions を含めることは有効です。- 戻り値:
- ソースクラス
- デフォルト:
- java.lang.Void.class