@RetentionSE(valueSE=RUNTIMESE) @TargetSE(valueSE=TYPESE) @InheritedSE @RepeatableSE(valueSE=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 のリスナーとして、レンダラーとしてリストされているすべてのコンポーネントに追加されます。
| 修飾子と型 | 必須要素と説明 |
|---|---|
ClassSE<? extends SystemEvent> | systemEventClassこのクラスがリスナーとしてインストールされるシステムイベントの種類。 |
| 修飾子と型 | オプションの要素と説明 |
|---|---|
ClassSE | sourceClass
|
public abstract ClassSE<? extends SystemEvent> systemEventClass
このクラスがリスナーとしてインストールされるシステムイベントの種類。実装は Class での完全一致のみをサポートし、サブクラスの関連を尊重してはなりません。式が予期された型のインスタンスに解決される限り、この属性の値に EL 式を含めることは有効です。
public abstract ClassSE sourceClass
systemEventClass() 属性の値によって指定された型のイベントを発行するオブジェクトの種類。式が予期された型のインスタンスに解決される限り、この属性の値に Jakarta Expression Language Expressions を含めることは有効です。
Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.