public abstract class AjaxLazyLoadPanel<T extends Component> extends Panel
This panel will wait with adding the content until isContentReady()
returns
true
. It will poll using an AbstractAjaxTimerBehavior
that is installed on the page. When the
component is replaced, the timer stops. When you have multiple AjaxLazyLoadPanel
s on the
same page, only one timer is used and all panels piggyback on this single timer.
This component will also replace the contents when a normal request comes through and the content is ready.
Modifier and Type | Field and Description |
---|---|
static String |
LAZY_LOAD_COMPONENT_ID
Deprecated.
will be removed in Wicket 9
|
ENABLE, FLAG_INITIALIZED, FLAG_RESERVED1, FLAG_RESERVED2, FLAG_RESERVED3, FLAG_RESERVED4, FLAG_RESERVED5, FLAG_RESERVED8, PARENT_PATH, PATH_SEPARATOR, RENDER, RFLAG_CONTAINER_DEQUEING, RFLAG_CONTAINER_HAS_REMOVALS
Constructor and Description |
---|
AjaxLazyLoadPanel(String id)
Constructor
|
AjaxLazyLoadPanel(String id,
IModel<?> model)
Constructor
|
Modifier and Type | Method and Description |
---|---|
abstract T |
getLazyLoadComponent(String markupId)
Factory method for creating the lazily loaded content that replaces the loading component after
isContentReady() returns true . |
Component |
getLoadingComponent(String id)
Create a loading component shown instead of the actual content until it is
isContentReady() . |
protected Duration |
getUpdateInterval()
Get the preferred interval for updates.
|
protected void |
handleCallbackScript(IHeaderResponse response,
CharSequence callbackScript,
Component component)
Deprecated.
this method is not called, and will be removed in Wicket 9
|
protected void |
initTimer()
Initialize a timer - default implementation installs an
AbstractAjaxTimerBehavior on the page,
if it is not already present. |
protected boolean |
isContentReady()
Determines that the content we're waiting for is ready, typically used in polling background
threads for their result.
|
protected boolean |
isLoaded()
Check whether the content is loaded.
|
protected void |
onBeforeRender()
Installs a page-global timer if not already present.
|
protected void |
onComponentLoaded(Component component,
AjaxRequestTarget target)
Deprecated.
override
onContentLoaded(Component, Optional) instead - will be removed in Wicket 9 |
protected void |
onConfigure()
Called on all components before any component is rendered.
|
protected void |
onContentLoaded(T content,
Optional<AjaxRequestTarget> target)
Called after the loading component was replaced with the lazy loaded content.
|
protected void |
updateAjaxAttributes(AjaxRequestAttributes attributes)
Deprecated.
this method is not called, and will be removed in Wicket 9
|
getRegionMarkup, newMarkupSourcingStrategy
getWebApplication, getWebPage, getWebRequest, getWebResponse, getWebSession
add, addDequeuedComponent, addOrReplace, autoAdd, canDequeueTag, contains, dequeue, dequeue, dequeuePreamble, findChildComponent, findComponentToDequeue, get, getAssociatedMarkup, getAssociatedMarkupStream, getMarkup, getMarkupType, internalAdd, internalInitialize, iterator, iterator, newDequeueContext, onComponentTagBody, onDetach, onInitialize, onRender, queue, remove, remove, removeAll, renderAll, renderAssociatedMarkup, renderNext, replace, setDefaultModel, size, stream, streamChildren, toString, toString, visitChildren, visitChildren
add, addStateChange, beforeRender, canCallListener, canCallListenerAfterExpiry, checkComponentTag, checkComponentTagAttribute, checkHierarchyChange, clearOriginalDestination, configure, continueToOriginalDestination, createConverter, debug, detach, detachModel, detachModels, determineVisibility, error, exceptionMessage, fatal, findMarkupStream, findPage, findParent, findParentWithAssociatedMarkup, getAjaxRegionMarkupId, getApplication, getBehaviorById, getBehaviorId, getBehaviors, getBehaviors, getClassRelativePath, getConverter, getDefaultModel, getDefaultModelObject, getDefaultModelObjectAsString, getDefaultModelObjectAsString, getEscapeModelStrings, getFeedbackMessages, getFlag, getId, getInnermostModel, getInnermostModel, getLocale, getLocalizer, getMarkup, getMarkupAttributes, getMarkupId, getMarkupId, getMarkupIdFromMarkup, getMarkupIdImpl, getMarkupSourcingStrategy, getMetaData, getModelComparator, getOutputMarkupId, getOutputMarkupPlaceholderTag, getPage, getPageRelativePath, getParent, getPath, getRenderBodyOnly, getRequest, getRequestCycle, getRequestFlag, getResponse, getSession, getSizeInBytes, getStatelessHint, getString, getString, getString, getStyle, getVariation, hasBeenRendered, hasErrorMessage, hasFeedbackMessage, info, initModel, internalOnModelChanged, internalRenderComponent, internalRenderHead, isActionAuthorized, isAuto, isBehaviorAccepted, isEnableAllowed, isEnabled, isEnabledInHierarchy, isIgnoreAttributeModifier, isInitialized, isRenderAllowed, isRendering, isStateless, isVersioned, isVisibilityAllowed, isVisible, isVisibleInHierarchy, markRendering, modelChanged, modelChanging, onAfterRender, onComponentTag, onEvent, onModelChanged, onModelChanging, onReAdd, onRemove, redirectToInterceptPage, remove, remove, render, renderComponentTag, rendered, renderHead, renderPart, renderPlaceholderTag, replaceComponentTagBody, replaceWith, sameInnermostModel, sameInnermostModel, send, setAuto, setDefaultModelObject, setEnabled, setEscapeModelStrings, setFlag, setIgnoreAttributeModifier, setMarkup, setMarkupId, setMarkupIdImpl, setMetaData, setOutputMarkupId, setOutputMarkupPlaceholderTag, setParent, setRenderBodyOnly, setResponsePage, setResponsePage, setResponsePage, setVersioned, setVisibilityAllowed, setVisible, success, urlFor, urlFor, urlFor, urlForListener, urlForListener, visitParents, visitParents, warn, wrap
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
dequeue, newDequeueContext
forEach, spliterator
@Deprecated public static final String LAZY_LOAD_COMPONENT_ID
public AjaxLazyLoadPanel(String id)
id
- protected boolean isContentReady()
This default implementation returns true
, i.e. assuming the content is ready immediately.
protected final void updateAjaxAttributes(AjaxRequestAttributes attributes)
@Deprecated protected final void handleCallbackScript(IHeaderResponse response, CharSequence callbackScript, Component component)
public Component getLoadingComponent(String id)
isContentReady()
.id
- The components idpublic abstract T getLazyLoadComponent(String markupId)
isContentReady()
returns true
. You may call setRenderBodyOnly(true)
on this component if you need the body only.markupId
- The components markupid.isContentReady()
@Deprecated protected final void onComponentLoaded(Component component, AjaxRequestTarget target)
onContentLoaded(Component, Optional)
instead - will be removed in Wicket 9protected void onContentLoaded(T content, Optional<AjaxRequestTarget> target)
This default implementation does nothing.
content
- The lazy loaded contenttarget
- optional Ajax request handlerprotected void onBeforeRender()
onBeforeRender
in class Component
MarkupContainer.addOrReplace(Component...)
protected void initTimer()
AbstractAjaxTimerBehavior
on the page,
if it is not already present.protected void onConfigure()
Component
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.
onConfigure
in class Component
protected Duration getUpdateInterval()
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.
protected final boolean isLoaded()
If not loaded already and the content is ready, replaces the lazy loading component with the lazily loaded content.
true
if content is loadedisContentReady()
Copyright © 2006–2022 Apache Software Foundation. All rights reserved.