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]