All Implemented Interfaces:
Serializable, Iterable<Component>, IEventSink, IEventSource, IFeedbackContributor, IConverterLocator, IMetadataContext<Serializable,Component>, IHeaderContributor, IRequestableComponent, IHierarchical<Component>, IClusterable
Direct Known Subclasses:

public class PagingNavigation extends Loop
A navigation for a PageableListView that holds links to other pages of the PageableListView.

For each row (one page of the list of pages) a PagingNavigationLinkwill 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>

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", "|"));
                loopItem.add(new Label("separator", ""));
        link.add(new Label("pageNumber", String.valueOf(page + 1)));
        link.add(new Label("pageLabel", "page"));
 <span wicket:id="navigation">
        <span wicket:id="separator"></span>
        <a wicket:id="pageLink" href="#">
                <span wicket:id="pageLabel"></span><span wicket:id="pageNumber"></span>
renders like:
 page1 | page2 | page3 | page4 | page5 | page6 | page7 | page8 | page9

Assuming 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.


Jonathan Locke, Eelco Hillenius, Juergen Donnerstag
See Also:
  • Field Details

  • Constructor Details

    • PagingNavigation

      public PagingNavigation(String id, IPageable pageable)
      id - See Component
      pageable - The underlying pageable component to navigate
    • PagingNavigation

      public PagingNavigation(String id, IPageable pageable, IPagingLabelProvider labelProvider)
      id - See Component
      pageable - The underlying pageable component to navigate
      labelProvider - The label provider for the text that the links should be displaying.
  • Method Details

    • getMargin

      public long getMargin()
      Gets the margin, default value is half the view size, unless explicitly set.
      the margin
    • getSeparator

      public String getSeparator()
      Gets the seperator.
      the seperator
    • getViewSize

      public int getViewSize()
      Gets the view size (is fixed by user).
      view size
    • setViewSize

      public void setViewSize(int size)
      view size of the navigation bar.
      size -
    • setMargin

      public void setMargin(int margin)
      Sets the margin.
      margin - the margin
    • setSeparator

      public void setSeparator(String separator)
      Sets the seperator. Null meaning, no separator at all.
      separator - the seperator
    • 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.

      onConfigure in class Component
    • getStartIndex

      protected final long getStartIndex()
      Allow subclasses replacing populateItem to calculate the current page number
      start index
    • populateItem

      protected void populateItem(LoopItem loopItem)
      Populate the current cell with a page link (PagingNavigationLink) enclosing the page number the link is pointing to. Subclasses may provide there own implementation adding more sophisticated page links.
      Specified by:
      populateItem in class Loop
      loopItem - The iteration of the loop
      See Also:
    • newPagingNavigationLink

      protected AbstractLink newPagingNavigationLink(String id, IPageable pageable, long pageIndex)
      Factory method for creating page number links.
      id - the component id.
      pageable - the pageable for the link
      pageIndex - the page index the link points to
      the page navigation link.
    • renderItem

      protected void renderItem(LoopItem loopItem)
      Renders the page link. Add the separator if not the last page link
      renderItem in class Loop
      loopItem - The loop iteration
      See Also: