T
- type of elements contained in the model's listpublic abstract class ListView<T> extends AbstractRepeater
List
s. However, there
are situations where it is necessary to work with other collection types, for repeaters that
might work better with non-list or database-driven collections see the
org.apache.wicket.markup.repeater package.
Also notice that in a list the item's uniqueness/primary key/id is identified as its index in the
list. If this is not the case you should either override getListItemModel(IModel, int)
to return a model that will work with the item's true primary key, or use a different repeater
that does not rely on the list index.
A ListView holds ListItem children. Items can be re-ordered and deleted, either one at a time or
many at a time.
Example:
<tbody> <tr wicket:id="rows" class="even"> <td><span wicket:id="id">Test ID</span></td> ...
Though this example is about a HTML table, ListView is not at all limited to HTML tables. Any kind of list can be rendered using ListView.
The related Java code:
add(new ListView<UserDetails>("rows", listData) { public void populateItem(final ListItem<UserDetails> item) { final UserDetails user = item.getModelObject(); item.add(new Label("id", user.getId())); } });
NOTE:
When you want to change the default generated markup it is important to realize that the ListView
instance itself does not correspond to any markup, however, the generated ListItems do.
This means that methods like Component.setRenderBodyOnly(boolean)
and
Component.add(org.apache.wicket.behavior.Behavior...)
should be invoked on the ListItem
that is given in populateItem(ListItem)
method.
WARNING: though you can nest ListViews within Forms, you HAVE to set the
setReuseItems property to true in order to have validation work properly. By default,
setReuseItems is false, which has the effect that ListView replaces all child components by new
instances. The idea behind this is that you always render the fresh data, and as people usually
use ListViews for displaying read-only lists (at least, that's what we think), this is good
default behavior.
However, as the components are replaced before the rendering starts, the search for specific
messages for these components fails as they are replaced with other instances. Another problem is
that 'wrong' user input is kept as (temporary) instance data of the components. As these
components are replaced by new ones, your user will never see the wrong data when setReuseItems
is false.
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 |
---|
ListView(String id) |
ListView(String id,
IModel<? extends List<T>> model) |
ListView(String id,
List<T> list) |
Modifier and Type | Method and Description |
---|---|
List<T> |
getList()
Gets the list of items in the listView.
|
protected IModel<T> |
getListItemModel(IModel<? extends List<T>> listViewModel,
int index)
Subclasses may provide their own ListItemModel with extended functionality.
|
IModel<? extends List<T>> |
getModel()
Gets model
|
List<T> |
getModelObject()
Gets model object
|
boolean |
getReuseItems()
If true re-rendering the list view is more efficient if the windows doesn't get changed at
all or if it gets scrolled (compared to paging).
|
int |
getStartIndex()
Get index of first cell in page.
|
int |
getViewSize()
Based on the model object's list size, firstIndex and view size, determine what the view size
really will be.
|
Link<Void> |
moveDownLink(String id,
ListItem<T> item)
Returns a link that will move the given item "down" (towards the end) in the listView.
|
Link<Void> |
moveUpLink(String id,
ListItem<T> item)
Returns a link that will move the given item "up" (towards the beginning) in the listView.
|
protected ListItem<T> |
newItem(int index,
IModel<T> itemModel)
Create a new ListItem for list item at index.
|
protected void |
onBeginPopulateItem(ListItem<T> item)
Comes handy for ready made ListView based components which must implement populateItem() but
you don't want to lose compile time error checking reminding the user to implement abstract
populateItem().
|
protected void |
onPopulate()
Callback to let the repeater know it should populate itself with its items.
|
protected abstract void |
populateItem(ListItem<T> item)
Populate a given item.
|
Link<Void> |
removeLink(String id,
ListItem<T> item)
Returns a link that will remove this ListItem from the ListView that holds it.
|
protected void |
renderChild(Component child)
Render a single child.
|
protected void |
renderItem(ListItem<?> item)
Render a single item.
|
protected Iterator<Component> |
renderIterator()
Returns an iterator for the collection of child components to be rendered.
|
ListView<T> |
setList(List<T> list)
Sets the model as the provided list and removes all children, so that the next render will be
using the contents of the model.
|
void |
setModel(IModel<? extends List<T>> model)
Sets model
|
void |
setModelObject(List<T> object)
Sets model object
|
ListView<T> |
setReuseItems(boolean reuseItems)
If true re-rendering the list view is more efficient if the windows doesn't get changed at
all or if it gets scrolled (compared to paging).
|
ListView<T> |
setStartIndex(int startIndex)
Set the index of the first item to render
|
ListView<T> |
setViewSize(int size)
Define the maximum number of items to render.
|
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, onConfigure, 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
public ListView(String id)
Component.Component(String)
public ListView(String id, IModel<? extends List<T>> model)
id
- component idmodel
- model containing a list ofComponent.Component(String, IModel)
public ListView(String id, List<T> list)
id
- See Componentlist
- List to cast to SerializableComponent.Component(String, IModel)
public final List<T> getList()
public boolean getReuseItems()
public final int getStartIndex()
public int getViewSize()
public final Link<Void> moveDownLink(String id, ListItem<T> item)
id
- Name of move-down link component to createitem
- public final Link<Void> moveUpLink(String id, ListItem<T> item)
id
- Name of move-up link component to createitem
- public final Link<Void> removeLink(String id, ListItem<T> item)
id
- Name of remove link component to createitem
- public ListView<T> setList(List<T> list)
list
- The list for the new model. The list must implement Serializable
.public ListView<T> setReuseItems(boolean reuseItems)
reuseItems
- Whether to reuse the child items.public ListView<T> setStartIndex(int startIndex)
startIndex
- First index of model object's list to displaypublic ListView<T> setViewSize(int size)
size
- Number of items to displayprotected IModel<T> getListItemModel(IModel<? extends List<T>> listViewModel, int index)
listViewModel
- The ListView's modelindex
- The list item indexprotected ListItem<T> newItem(int index, IModel<T> itemModel)
index
- itemModel
- object in the list that the item representsprotected final void onPopulate()
AbstractRepeater
onPopulate
in class AbstractRepeater
AbstractRepeater.onPopulate()
protected void onBeginPopulateItem(ListItem<T> item)
item
- protected abstract void populateItem(ListItem<T> item)
be careful to add any components to the list item. So, don't do:
add(new Label("foo", "bar"));but:
item.add(new Label("foo", "bar"));
item
- The item to populateprotected final void renderChild(Component child)
AbstractRepeater
renderChild
in class AbstractRepeater
child
- Child component to be renderedAbstractRepeater.renderChild(org.apache.wicket.Component)
protected void renderItem(ListItem<?> item)
item
- The item to be renderedprotected Iterator<Component> renderIterator()
AbstractRepeater
renderIterator
in class AbstractRepeater
AbstractRepeater.renderIterator()
Copyright © 2006–2019 Apache Software Foundation. All rights reserved.