Class AjaxRequestHandler

  • All Implemented Interfaces:
    AjaxRequestTarget, IPageClassRequestHandler, IPageRequestHandler, IPartialPageRequestHandler, org.apache.wicket.request.ILoggableRequestHandler, org.apache.wicket.request.IRequestHandler

    public class AjaxRequestHandler
    extends java.lang.Object
    implements AjaxRequestTarget
    A request target that produces ajax response envelopes used on the client side to update component markup as well as evaluate arbitrary javascript.

    A component whose markup needs to be updated should be added to this target via AjaxRequestTarget#add(Component) method. Its body will be rendered and added to the envelope when the target is processed, and refreshed on the client side when the ajax response is received.

    It is important that the component whose markup needs to be updated contains an id attribute in the generated markup that is equal to the value retrieved from Component#getMarkupId(). This can be accomplished by either setting the id attribute in the html template, or using an attribute modifier that will add the attribute with value Component#getMarkupId() to the tag ( such as MarkupIdSetter )

    Any javascript that needs to be evaluated on the client side can be added using AjaxRequestTarget#append/prependJavaScript(String). For example, this feature can be useful when it is desirable to link component update with some javascript effects.

    The target provides a listener interface AjaxRequestTarget.IListener that can be used to add code that responds to various target events by adding listeners via addListener(AjaxRequestTarget.IListener)

    Since:
    1.2
    Author:
    Igor Vaynberg (ivaynberg), Eelco Hillenius
    • Field Detail

      • respondersFrozen

        protected transient boolean respondersFrozen
        see https://issues.apache.org/jira/browse/WICKET-3564
      • listenersFrozen

        protected transient boolean listenersFrozen
    • Constructor Detail

      • AjaxRequestHandler

        public AjaxRequestHandler​(Page page)
        Constructor
        Parameters:
        page - the currently active page
    • Method Detail

      • addChildren

        public final void addChildren​(MarkupContainer parent,
                                      java.lang.Class<?> childCriteria)
        Description copied from interface: IPartialPageRequestHandler
        Visits all children of the specified parent container and adds them to the target if they are of same type as childCriteria
        Specified by:
        addChildren in interface IPartialPageRequestHandler
        Parameters:
        parent - Must not be null.
        childCriteria - Must not be null. If you want to traverse all components use ` Component.class as the value for this argument.
      • add

        public void add​(Component component,
                        java.lang.String markupId)
        Description copied from interface: IPartialPageRequestHandler
        Adds a component to the list of components to be rendered
        Specified by:
        add in interface IPartialPageRequestHandler
        Parameters:
        component - component to be rendered
        markupId - id of client-side dom element that will be updated
      • focusComponent

        public final void focusComponent​(Component component)
        Description copied from interface: IPartialPageRequestHandler
        Sets the focus in the browser to the given component. The markup id must be set. If the component is null the focus will not be set to any component.
        Specified by:
        focusComponent in interface IPartialPageRequestHandler
        Parameters:
        component - The component to get the focus or null.
      • appendJavaScript

        public final void appendJavaScript​(java.lang.CharSequence javascript)
        Description copied from interface: IPartialPageRequestHandler
        Adds javascript that will be evaluated on the client side after components are replaced

        If the javascript needs to do something asynchronously (i.e. needs to use window.setTimeout(), for example to do animations) then the following special syntax may be used: someFunctionName|myJsLogic(someFunctionName);. Wicket will transform it to: function(someFunctionName){myJsLogic(someFunctionName);} and your code is responsible to execute someFunctionName() when the asynchronous task is finished. Once someFunctionName is executed the next appended script will be executed. Important: it is highly recommended to execute your code in try/finally to make sure someFunctionName is executed even an error happens in your code, otherwise all following scripts wont be executed.

        Specified by:
        appendJavaScript in interface IPartialPageRequestHandler
      • detach

        public void detach​(org.apache.wicket.request.IRequestCycle requestCycle)
        Specified by:
        detach in interface org.apache.wicket.request.IRequestHandler
        See Also:
        IRequestHandler.detach(org.apache.wicket.request.IRequestCycle)
      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object
        See Also:
        Object.equals(java.lang.Object)
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
        See Also:
        Object.hashCode()
      • prependJavaScript

        public final void prependJavaScript​(java.lang.CharSequence javascript)
        Description copied from interface: IPartialPageRequestHandler
        Adds javascript that will be evaluated on the client side before components are replaced.

        If the javascript needs to do something asynchronously (i.e. needs to use window.setTimeout(), for example to do animations) then the following special syntax may be used: someFunctionName|myJsLogic(someFunctionName);. Wicket will transform it to: function(someFunctionName){myJsLogic(someFunctionName);} and your code is responsible to execute someFunctionName() when the asynchronous task is finished. Once someFunctionName is executed the next prepended script will be executed. Important: it is highly recommended to execute your code in try/finally to make sure someFunctionName is executed even an error happens in your code, otherwise all following scripts and component replacements wont be made.

        Specified by:
        prependJavaScript in interface IPartialPageRequestHandler
      • respond

        public final void respond​(org.apache.wicket.request.IRequestCycle requestCycle)
        Specified by:
        respond in interface org.apache.wicket.request.IRequestHandler
        See Also:
        IRequestHandler.respond(org.apache.wicket.request.IRequestCycle)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
        See Also:
        Object.toString()
      • getHeaderResponse

        public IHeaderResponse getHeaderResponse()
        Description copied from interface: IPartialPageRequestHandler
        Returns the header response associated with current handler. Beware that only renderOnDomReadyJavaScript and renderOnLoadJavaScript can be called outside the renderHeader(IHeaderResponse response) method. Calls to other render** methods will result in the call failing with a debug-level log statement to help you see why it failed.
        Specified by:
        getHeaderResponse in interface IPartialPageRequestHandler
        Returns:
        header response
      • getLastFocusedElementId

        public java.lang.String getLastFocusedElementId()
        Description copied from interface: AjaxRequestTarget
        Returns the HTML id of the last focused element.
        Specified by:
        getLastFocusedElementId in interface AjaxRequestTarget
        Returns:
        the markup id of the focused element in the browser
      • getLogData

        public PageLogData getLogData()
        Specified by:
        getLogData in interface org.apache.wicket.request.ILoggableRequestHandler