public class PagingNavigation extends Loop
For each row (one page of the list of pages) a PagingNavigationLink
will be added that
contains a Label
with the page number of that link (1..n).
<td wicket:id="navigation"> <a wicket:id="pageLink" href="SearchCDPage.html"> <span wicket:id="pageNumber">1</span> </a> </td>thus renders like:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Override method populateItem to customize the rendering of the navigation. For instance:
protected void populateItem(LoopItem loopItem) { final int page = loopItem.getIteration(); final PagingNavigationLink link = new PagingNavigationLink("pageLink", pageableListView, page); if (page > 0) { loopItem.add(new Label("separator", "|")); } else { loopItem.add(new Label("separator", "")); } link.add(new Label("pageNumber", String.valueOf(page + 1))); link.add(new Label("pageLabel", "page")); loopItem.add(link); }With:
<span wicket:id="navigation"> <span wicket:id="separator"></span> <a wicket:id="pageLink" href="#"> <span wicket:id="pageLabel"></span><span wicket:id="pageNumber"></span> </a> </span>renders like:
page1 | page2 | page3 | page4 | page5 | page6 | page7 | page8 | page9Assuming a PageableListView with 1000 entries and not more than 10 lines shall be printed per page, the navigation bar would have 100 entries. Because this is not feasible PagingNavigation's navigation bar is pageable as well.
The page links displayed are automatically adjusted based on the number of page links to be displayed and a margin. The margin makes sure that the page link pointing to the current page is not at the left or right end of the page links currently printed and thus providing a better user experience.
Use setMargin() and setViewSize() to adjust the navigation's bar view size and margin.
Please
for a ready made component which already includes links to the first,
previous, next and last page.
,
Serialized FormModifier and Type | Field and Description |
---|---|
protected IPagingLabelProvider |
labelProvider
The label provider for the text that the links should be displaying.
|
protected IPageable |
pageable
The PageableListView this navigation is navigating.
|
ENABLE, FLAG_INITIALIZED, FLAG_RESERVED1, FLAG_RESERVED2, FLAG_RESERVED3, FLAG_RESERVED4, FLAG_RESERVED5, FLAG_RESERVED8, PARENT_PATH, PATH_SEPARATOR, RENDER, RFLAG_CONTAINER_DEQUEING
Constructor and Description |
---|
PagingNavigation(String id,
IPageable pageable)
Constructor.
|
PagingNavigation(String id,
IPageable pageable,
IPagingLabelProvider labelProvider)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
long |
getMargin()
Gets the margin, default value is half the view size, unless explicitly set.
|
String |
getSeparator()
Gets the seperator.
|
protected long |
getStartIndex()
Allow subclasses replacing populateItem to calculate the current page number
|
int |
getViewSize()
Gets the view size (is fixed by user).
|
protected AbstractLink |
newPagingNavigationLink(String id,
IPageable pageable,
long pageIndex)
Factory method for creating page number links.
|
protected void |
onConfigure()
Called on all components before any component is rendered.
|
protected void |
populateItem(LoopItem loopItem)
Populate the current cell with a page link (PagingNavigationLink) enclosing the page number
the link is pointing to.
|
protected void |
renderItem(LoopItem loopItem)
Renders the page link.
|
void |
setMargin(int margin)
Sets the margin.
|
void |
setSeparator(String separator)
Sets the seperator.
|
void |
setViewSize(int size)
view size of the navigation bar.
|
getIterations, newItem, onPopulate, renderChild, renderIterator
dequeue, getMarkup, onBeforeRender, onRender
getWebApplication, getWebPage, getWebRequest, getWebResponse, getWebSession
add, addDequeuedComponent, addOrReplace, autoAdd, canDequeueTag, contains, dequeue, dequeuePreamble, findChildComponent, findComponentToDequeue, get, getAssociatedMarkup, getAssociatedMarkupStream, getMarkupType, getRegionMarkup, internalAdd, internalInitialize, iterator, iterator, newDequeueContext, onComponentTagBody, onDetach, onInitialize, 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, newMarkupSourcingStrategy, 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
forEach, spliterator
protected IPageable pageable
protected IPagingLabelProvider labelProvider
public PagingNavigation(String id, IPageable pageable)
id
- See Componentpageable
- The underlying pageable component to navigatepublic PagingNavigation(String id, IPageable pageable, IPagingLabelProvider labelProvider)
id
- See Componentpageable
- The underlying pageable component to navigatelabelProvider
- The label provider for the text that the links should be displaying.public long getMargin()
public String getSeparator()
public int getViewSize()
public void setViewSize(int size)
size
- public void setMargin(int margin)
margin
- the marginpublic void setSeparator(String separator)
separator
- the seperatorprotected 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 final long getStartIndex()
protected void populateItem(LoopItem loopItem)
populateItem
in class Loop
loopItem
- The iteration of the loopLoop.populateItem(org.apache.wicket.markup.html.list.LoopItem)
protected AbstractLink newPagingNavigationLink(String id, IPageable pageable, long pageIndex)
id
- the component id.pageable
- the pageable for the linkpageIndex
- the page index the link points toprotected void renderItem(LoopItem loopItem)
renderItem
in class Loop
loopItem
- The loop iterationLoop.renderItem(org.apache.wicket.markup.html.list.LoopItem)
Copyright © 2006–2019 Apache Software Foundation. All rights reserved.