Classes tagged with this annotation are installed as listeners using the method
jakarta.faces.application.Application#subscribeToEvent
or
jakarta.faces.component.UIComponent#subscribeToEvent
(depending on the circumstances, described below).
The default implementation must support attaching this annotation to jakarta.faces.component.UIComponent
or
jakarta.faces.render.Renderer
classes. In both cases, the annotation processing described herein must
commence during the implementation of any variant of
jakarta.faces.application.Application
.createComponent()
and must complete before the
UIComponent
instance is returned from createComponent()
. The annotation processing must
proceed according to an algorithm semantically equivalent to the following.
If this annotation is not present on the class in question, no action must be taken.
Determine the "target" on which to call subscribeToEvent
.
If the class to which this annotation is attached implements ComponentSystemEventListener
and is a
UIComponent
instance, "target" is the UIComponent
instance.
If the class to which this annotation is attached implements ComponentSystemEventListener
and is a
Renderer
instance, "target" is the UIComponent
instance that is to be rendered by this
Renderer
instance.
If the class to which this annotation is attached implements ComponentSystemEventListener
and is neither an
instance of Renderer
nor UIComponent
, the action taken is unspecified. This case must not
trigger any kind of error.
If the class to which this annotation is attached implements SystemEventListener
and does not implement
ComponentSystemEventListener
, "target" is the jakarta.faces.application.Application
instance.
Determine the variant of subscribeToEvent()
to call and the parameters to pass to it.
If "target" is a UIComponent
call
jakarta.faces.component.UIComponent#subscribeToEvent(Class, ComponentSystemEventListener)
, passing the
systemEventClass
of the annotation as the first argument and the instance of the class to which this
annotation is attached (which must implement ComponentSystemEventListener
) as the second argument.
If "target" is the jakarta.faces.application.Application
instance, inspect the value of the
sourceClass
annotation attribute value.
If the value is Void.class
, call
jakarta.faces.application.Application#subscribeToEvent(Class, SystemEventListener)
, passing the value of
systemEventClass
as the first argument and the instance of the class to which this annotation is attached
(which must implement SystemEventListener) as the second
argument.
Otherwise, call jakarta.faces.application.Application#subscribeToEvent(Class, Class, SystemEventListener)
,
passing the value of systemEventClass
as the first argument, the value of sourceClass
as the second
argument, and the instance of the class to which this annotation is attached (which must implement
SystemEventListener) as the third
argument.
Example: The standard renderer for jakarta.faces.resource.Stylesheet
must have the following annotation
declaration:
@ListenerFor(systemEventClass=PostAddToViewEvent.class)
This will cause the renderer to be added as a listener for the PostAddToViewEvent
to all components that list
it as their renderer.
Modifier and Type | Method and Description |
---|---|
public Class | Returns: the source class
The kind of object that emits events of the type given by the value of the |
public Class | Returns: the event classThe kind of system event for which this class will be installed as a listener. |
sourceClass | back to summary |
---|---|
public Class
The kind of object that emits events of the type given by the value of the
|
systemEventClass | back to summary |
---|---|
public Class
The kind of system event for which this class will be installed as a listener. The implementation only supports exact
matches on the
|