@RetentionSE(valueSE=RUNTIMESE) @TargetSE(valueSE=TYPESE) @InheritedSE @RepeatableSE(valueSE=ListenersFor.class) public @interface ListenerFor
このアノテーションでタグ付けされたクラスは、メソッド Application.subscribeToEvent(java.lang.Class<? extends javax.faces.event.SystemEvent>, java.lang.Class<?>, javax.faces.event.SystemEventListener)
または UIComponent.subscribeToEvent(java.lang.Class<? extends javax.faces.event.SystemEvent>, javax.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.
を実装する必要があります)を渡します。
サンプル: javax.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 © 2019 Eclipse Foundation.
Use is subject to license terms.