Class AjaxLazyLoadPanel<T extends Component>

    • Method Detail

      • isContentReady

        protected boolean isContentReady()
        Determines that the content we're waiting for is ready, typically used in polling background threads for their result. Override this to implement your own check.

        This default implementation returns true, i.e. assuming the content is ready immediately.

        Returns:
        whether the actual content is ready
      • getLoadingComponent

        public Component getLoadingComponent​(String id)
        Create a loading component shown instead of the actual content until it is isContentReady().
        Parameters:
        id - The components id
        Returns:
        The component to show while the real content isn't ready yet
      • getLazyLoadComponent

        public abstract T getLazyLoadComponent​(String markupId)
        Factory method for creating the lazily loaded content that replaces the loading component after isContentReady() returns true. You may call setRenderBodyOnly(true) on this component if you need the body only.
        Parameters:
        markupId - The components markupid.
        Returns:
        the content to show after isContentReady()
      • onContentLoaded

        protected void onContentLoaded​(T content,
                                       Optional<AjaxRequestTarget> target)
        Called after the loading component was replaced with the lazy loaded content.

        This default implementation does nothing.

        Parameters:
        content - The lazy loaded content
        target - optional Ajax request handler
      • onConfigure

        protected void onConfigure()
        Description copied from class: Component
        Called on all components before any component is rendered. This method should be used to configure such things as visibility and enabled flags.

        Overrides must call super.onConfigure(), usually before any other code

        NOTE: Component hierarchy should not be modified inside this method, instead it should be done in Component.onBeforeRender()

        NOTE: Why this method is preferrable to directly overriding Component.isVisible() and Component.isEnabled()? Because those methods are called multiple times even for processing of a single request. If they contain expensive logic they can slow down the response time of the entire page. Further, overriding those methods directly on form components may lead to inconsistent or unexpected state depending on when those methods are called in the form processing workflow. It is a better practice to push changes to state rather than pull.

        NOTE: If component's visibility or another property depends on another component you may call other.configure() followed by other.isVisible() as mentioned in Component.configure() javadoc.

        NOTE: Why should Component.onBeforeRender() not be used for this? Because if a component's visibility is controlled inside Component.onBeforeRender(), once invisible the component will never become visible again.

        Overrides:
        onConfigure in class Component
      • getUpdateInterval

        protected Duration getUpdateInterval()
        Get the preferred interval for updates.

        Since all LazyLoadingPanels on a page share the same Ajax timer, its update interval is derived from the minimum of all panel's update intervals.

        Returns:
        update interval, must not be null
      • isLoaded

        protected final boolean isLoaded()
        Check whether the content is loaded.

        If not loaded already and the content is ready, replaces the lazy loading component with the lazily loaded content.

        Returns:
        true if content is loaded
        See Also:
        isContentReady()