The DataTable in Wicket Extensions 1.1
handles paging and sorting, but you must build a custom IDataProvider that accumulates
the sorting instructions from the DataTable and provides sorted subsets of the
data when requested by the DataTable (which handles the actual paging display). DataTable and supporting classes have been
greatly refactored in Wicket Extensions 1.2 to give the user much more
flexibility in the set of features desired. The API changes will break Wicket 1.1
programs, so if you need to subclass anything to modify its behavior, I would
suggest going to Wicket 1.2 now. Otherwise, you can upgrade fairly easily
at any time by replacing Wicket 1.1 DataTable with Wicket 1.2
DefaultDataTable. Wicket 1.2
DataTable is more flexible but less complete; DefaultDataTable subclasses it to
provide defaults which make it behave like the Wicket 1.1 DataTable. I have come up with my own subclass of
DataTable and implementation of IDataProvider to display any arbitrary database
java.sql.ResultSet. The basic idea
is that my IDataProvider implementation contains a List of rows, each row
consisting of a List of Object.
Also in the implementation is an array of descriptors, one per column, each
of which contains the column name and an indicator as to whether I want to be
able to sort on that column. (The
column name comes from the ResultSetMetadata; a method is provided to set the
sortability flag.) My implementation
of the abstract method to deliver a sequence of rows will delegate to the List.sublist()
command from the Java Collections API, and each time the DataTable delivers a
sort criteria I apply the Collections.sort() method to my list of rows, passing
it a Comparator that delegates to the Comparator of the Object at the relevant
column index. My implementation of
IDataProvider can also look at my array of column descriptors and generate a
list of IColumn objects (needed to construct the DataTable). It’s actually a bit more complicated
than that (and a work in progress), because I have complicated the above
mechanisms to deal with the possibility of a summary row at the end, and when
rows are requested, the query string will be recalculated based on form data --
and if it has changed since the last request then the data will be refreshed
from the database and the current page set back to 1. The code is actually quite compact; when I’m
finished I’ll post it to the list if there is any interest. -----Original Message----- there is also a DataTable component which wraps
DataView+paging+sorting. On 3/14/06, Vincent Jenks < [EMAIL PROTECTED]> wrote: I'm using 1.1.1 Are there any plans to whittle
down the amount of code it takes to implement paging & sorting? Has
it changed at all in 1.2? I spent a lot of time w/ ASP.NET (which
wicket feels quite similar to) and there's a DataGrid component that has
properties to set paging & sorting w/o any extra work. Something like
that would be really convenient. On 3/14/06, Igor Vaynberg < [EMAIL PROTECTED]>
wrote: are you using 1.1 ? or 1.2 ?
On 3/14/06, Vincent Jenks <[EMAIL PROTECTED]>
wrote: Sorry, I didn't mention that the List is wrapped in a
detached model....so it's an IModel, not List in the constructor. On 3/14/06, Igor Vaynberg < [EMAIL PROTECTED]>
wrote: yes DataView works with IDataProvider instead of list.
not sure why you didnt get a compile error since there is no (String,List)
constructor. On 3/14/06, Vincent Jenks <
[EMAIL PROTECTED]> wrote: So, I'm trying to use a DataView so I can page a
collection of objects
|
- RE: [Wicket-user] DataView (extentions) Frank Silbermann
- Re: [Wicket-user] DataView (extentions) Mats Norén
- Re: [Wicket-user] DataView (extentions) Igor Vaynberg
- Re: [Wicket-user] DataView (extentions) Vincent Jenks