This may help. I am moving my DD Poker site to wicket and implemented an
IDataProvider around my database service as follows:
private class HistoryData implements IDataProvider
{
private static final long serialVersionUID = 42L;
private PokerUser user;
private int count;
private HistoryData(PokerUser user)
{
this.user = user;
count =
histService.getAllTournamentHistoriesForProfileCount(user.getId());
}
@SuppressWarnings({"RawUseOfParameterizedType"})
public Iterator iterator(int first, int pagesize)
{
return
histService.getAllTournamentHistoriesForProfile(user.getId(), count, first,
pagesize).iterator();
}
public int size()
{
return count;
}
public boolean isEmpty()
{
return count == 0;
}
public IModel model(Object object)
{
return new CompoundPropertyModel(new EntityModel(object));
}
public void detach()
{
}
}
Where EntityModel is:
public class EntityModel extends CompoundPropertyModel
{
private static final long serialVersionUID = 42L;
/**
* Constructor
*
* @param object The model object, which may or may not implement IModel
*/
public EntityModel(Object object)
{
super(new NonLoadableDetachableModel(object));
}
}
and NonLoadableDetachableModel is
public class NonLoadableDetachableModel extends LoadableDetachableModel
{
private static final long serialVersionUID = 42L;
public NonLoadableDetachableModel(Object model)
{
super(model);
}
@Override
protected Object load()
{
throw new UnsupportedOperationException("load should never be
called");
}
}
I created this last class because my pages are read-only and the result set
is always fetched through the service. I didn't want to have my (JPA based)
entities being serialized.
The HistoryData class worked great with the base DataView class in Wicket.
Note that I drew a lot of inspiration from:
http://wicketstuff.org/wicket13/repeater/
and digging around in the source.
I don't know if this will help you or not - hopefully so!
-Doug
Eyal Golan wrote:
>
> Hi,
> Can anyone give me an explanation about paging with DetachableModel?
>
> My problem:
> We have records in the DB that can be a-lot.
> We also filter them sometimes.
>
> someone in the company created a non-standard paging.
> He doesn't use the Wicket's paging.
>
> The iterator method of the DataProvider he created returns only the number
> of elements that should be displayed in the current page.
> Eg. suppose we decided we show 20 records per page.
> The DataProvider keeps track on which page we're at.
> Then he calculates the indexes of records.
> It's done in getVisibleTickets() method.
> int fromIndex = (currentPage - 1) * (ticketsPerPage);
> int toIndex = ticketsPerPage;
>
> And then he asks the DB for the records in this range (with the filter).
> This is the size() method:
> public int size() {
> if ((visibleTickets == null) || (update)) {
> getVisibleTickets();
> }
> return visibleTickets.size();
> }
>
> OK, I hope i was clear enough.
> I know that it might be done using Wicket's library.
> Can anyone explain?
>
> Thanks
> --
> Eyal Golan
> [EMAIL PROTECTED]
>
> Visit: http://jvdrums.sourceforge.net/
>
>
--
View this message in context:
http://www.nabble.com/intro-and-explanation-about-DataTable-and-DetachableModel-tp16852272p16853277.html
Sent from the Wicket - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]