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]

Reply via email to