Class EventHandler

  • All Implemented Interfaces:
    jakarta.faces.view.AttachedObjectHandler, jakarta.faces.view.BehaviorHolderAttachedObjectHandler, jakarta.faces.view.facelets.FaceletHandler

    public class EventHandler
    extends TobagoComponentHandler
    implements jakarta.faces.view.BehaviorHolderAttachedObjectHandler
    This tag creates an instance of AjaxBehavior, and associates it with the nearest parent UIComponent that implements ClientBehaviorHolder interface. This tag can be used on single or composite components.

    Unless otherwise specified, all attributes accept static values or EL expressions.

    According to the documentation, the tag handler implementing this tag should meet the following conditions:

    • Since this tag attach objects to UIComponent instances, and those instances implements Behavior interface, this component should implement BehaviorHolderAttachedObjectHandler interface.
    • f:ajax does not support binding property. In theory we should do something similar to f:convertDateTime tag does: extends from ConverterHandler and override setAttributes method, but in this case BehaviorTagHandlerDelegate has binding property defined, so if we extend from BehaviorHandler we add binding support to f:ajax.
    • This tag works as a attached object handler, but note on the api there is no component to define a target for a behavior. See comment inside apply() method.
    Since:
    3.0.0
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static Class<?>[] AJAX_BEHAVIOR_LISTENER_SIG  
      • Fields inherited from class jakarta.faces.view.facelets.DelegatingMetaTagHandler

        delegateFactory
      • Fields inherited from class jakarta.faces.view.facelets.TagHandler

        nextHandler, tag, tagId
    • Constructor Summary

      Constructors 
      Constructor Description
      EventHandler​(jakarta.faces.view.facelets.ComponentConfig config)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void apply​(jakarta.faces.view.facelets.FaceletContext ctx, jakarta.faces.component.UIComponent parent)  
      void applyAttachedObject​(jakarta.faces.context.FacesContext context, jakarta.faces.component.UIComponent parent)
      This method should create an AjaxBehavior object and attach it to the parent component.
      protected EventBehavior createBehavior​(jakarta.faces.context.FacesContext context)  
      String getEventName()
      ViewDeclarationLanguage.retargetAttachedObjects uses it to check if the the target to be processed is applicable for this handler
      String getFor()
      The documentation says this attribute should not be used since it is not taken into account.
      void onComponentCreated​(jakarta.faces.view.facelets.FaceletContext faceletContext, jakarta.faces.component.UIComponent component, jakarta.faces.component.UIComponent parent)  
      • Methods inherited from class jakarta.faces.view.facelets.ComponentHandler

        createComponent, getComponentConfig, getTagHandlerDelegate, isNew
      • Methods inherited from class jakarta.faces.view.facelets.DelegatingMetaTagHandler

        applyNextHandler, getBinding, getTag, getTagAttribute, getTagId, isDisabled, setAttributes
      • Methods inherited from class jakarta.faces.view.facelets.TagHandler

        getAttribute, getRequiredAttribute, toString
    • Field Detail

      • AJAX_BEHAVIOR_LISTENER_SIG

        public static final Class<?>[] AJAX_BEHAVIOR_LISTENER_SIG
    • Constructor Detail

      • EventHandler

        public EventHandler​(jakarta.faces.view.facelets.ComponentConfig config)
    • Method Detail

      • apply

        public void apply​(jakarta.faces.view.facelets.FaceletContext ctx,
                          jakarta.faces.component.UIComponent parent)
                   throws IOException
        Specified by:
        apply in interface jakarta.faces.view.facelets.FaceletHandler
        Overrides:
        apply in class jakarta.faces.view.facelets.DelegatingMetaTagHandler
        Throws:
        IOException
      • getEventName

        public String getEventName()
        ViewDeclarationLanguage.retargetAttachedObjects uses it to check if the the target to be processed is applicable for this handler
        Specified by:
        getEventName in interface jakarta.faces.view.BehaviorHolderAttachedObjectHandler
      • applyAttachedObject

        public void applyAttachedObject​(jakarta.faces.context.FacesContext context,
                                        jakarta.faces.component.UIComponent parent)
        This method should create an AjaxBehavior object and attach it to the parent component.

        Also, it should check if the parent can apply the selected AjaxBehavior to the selected component through ClientBehaviorHolder.getEventNames() or ClientBehaviorHolder.getDefaultEventName()

        Specified by:
        applyAttachedObject in interface jakarta.faces.view.AttachedObjectHandler
      • createBehavior

        protected EventBehavior createBehavior​(jakarta.faces.context.FacesContext context)
      • onComponentCreated

        public void onComponentCreated​(jakarta.faces.view.facelets.FaceletContext faceletContext,
                                       jakarta.faces.component.UIComponent component,
                                       jakarta.faces.component.UIComponent parent)
        Overrides:
        onComponentCreated in class jakarta.faces.view.facelets.ComponentHandler
      • getFor

        public String getFor()
        The documentation says this attribute should not be used since it is not taken into account. Instead, getEventName is used on ViewDeclarationLanguage.retargetAttachedObjects.
        Specified by:
        getFor in interface jakarta.faces.view.AttachedObjectHandler