Class SelectorComposer<T extends Component>

  • All Implemented Interfaces:
    java.io.Serializable, ComponentActivationListener, ComponentCloneListener, Composer<T>, ComposerExt<T>

    public class SelectorComposer<T extends Component>
    extends java.lang.Object
    implements Composer<T>, ComposerExt<T>, ComponentCloneListener, ComponentActivationListener, java.io.Serializable

    A composer analogous to GenericForwardComposer. Instead of wiring variables and adding event listeners by naming convention, this composer do the work by annotation and selectors.

    For example:
    
     MyComposer.java
     
     public class MyComposer extends SelectorComposer {
         
         @Wire("#win")
         private Window myWin;
         
         // implicit variables
         @WireVariable
         private Desktop desktop;
         
         @Listen("onClick = button#btn")
         public void onSubmit(Event event){
             // do something ...
         }
         
     }
     
    The selector syntax is analogous to CSS selector syntax. For example,
    
     @Wire("textbox") // matches all textboxes
     @Wire("#win") // matches components of id "#win" within the same IdSpace
     @Wire(".myclass") // matches components of sclass "myclass"
     @Wire("label[value = 'My Label']") // matches all labels with value "My Label"
     @Wire(":first-child") // matches all components which are first child
     @Wire("window textbox") // matches textbox who is a descendant of a window
     @Wire("window > textbox") // matches textbox who is a child of a window
     @Wire("window + textbox") // matches textbox who is the next sibling of a window
     @Wire("window ~ textbox") // matches textbox who is a younger sibling of a window
     @Wire("window > textbox.myclass:first-child") // conditions can be mixed
     
    Since:
    6.0.0
    Author:
    simonpai
    See Also:
    Serialized Form
    • Field Detail

      • _resolvers

        protected final java.util.List<VariableResolver> _resolvers
        A list of resolvers (never null). A variable resolver is added automatically if VariableResolver was annotated.
    • Constructor Detail

      • SelectorComposer

        public SelectorComposer()
    • Method Detail

      • doBeforeCompose

        public ComponentInfo doBeforeCompose​(Page page,
                                             Component parent,
                                             ComponentInfo compInfo)
        Description copied from interface: ComposerExt
        Invokes before composing a component. If you want to manipulate the specified component info, you can use ComponentInfo.duplicate() to make a copy and then modify it such that it won't affect the default behavior.
        Specified by:
        doBeforeCompose in interface ComposerExt<T extends Component>
        Parameters:
        page - the page for composing this component.
        parent - the parent component, or null if it is the root component.
        compInfo - the component info used to instantiate the component. Notice that it is null if the page is rendered as ZK JSP, since ComponentInfo is not available under ZK JSP.
        Returns:
        the component info used to instantiate the component. In most case, it shall return compInfo. If null is returned, the component won't be instantiated. In other words, it is ignored.
      • doBeforeComposeChildren

        public void doBeforeComposeChildren​(T comp)
                                     throws java.lang.Exception
        Description copied from interface: ComposerExt
        Invokes after the component is instantiated and initialized, but before composing any child.
        Specified by:
        doBeforeComposeChildren in interface ComposerExt<T extends Component>
        Parameters:
        comp - the component being composed
        Throws:
        java.lang.Exception
      • doAfterCompose

        public void doAfterCompose​(T comp)
                            throws java.lang.Exception
        Description copied from interface: Composer
        Invokes after ZK loader creates this component, initializes it and composes all its children, if any.
        Specified by:
        doAfterCompose in interface Composer<T extends Component>
        Parameters:
        comp - the component has been composed
        Throws:
        java.lang.Exception
      • getSelf

        protected T getSelf()
        Returns the component which applies to this composer.
        Since:
        6.0.1
      • getPage

        protected Page getPage()
        Returns the current page.
      • alert

        protected void alert​(java.lang.String m)
        Shortcut to call Messagebox.show(String).
      • willClone

        public java.lang.Object willClone​(Component comp)
        Internal use only. Call-back method of CloneComposerListener. You shall not call this method directly. Clone this Composer when its applied component is cloned.
        Specified by:
        willClone in interface ComponentCloneListener
        Parameters:
        comp - the clone of the applied component
        Returns:
        A clone of this Composer.
      • doCatch

        public boolean doCatch​(java.lang.Throwable ex)
                        throws java.lang.Exception
        Description copied from interface: ComposerExt
        Called when an exception occurs when composing the component.

        If you don't want to handle the exception, simply returns false. boolean doCatch(Throwable ex) {return false;}

        An exception thrown in this method is simply logged. It has no effect on the execution. If you want to ignore the exception, just return true.

        Specified by:
        doCatch in interface ComposerExt<T extends Component>
        Parameters:
        ex - the exception being thrown
        Returns:
        whether to ignore the exception. If false is returned, the exception will be re-thrown. Note: once a composer's doCatch returns true, the exception will be ignored and it means doCatch of the following composers won't be called.
        Throws:
        java.lang.Exception