The size() method was one of my biggest stumbling blocks when I started using
DataProvders, but for slightly different reasons (i.e. just having a size
method makes it less maintainable, perform worse, less scalable and gives
less accurate results).  But when I tried to work around the size method, I
found it was very deeply embedded in the inner workings of DataTable.  I
also think DataTable is too nice of a component to not use.  So I came up
with a solution that doesn't require the DataProvider to have a size()
method, but leaves it in DataTable.  I've submitted this to JIRA
(https://issues.apache.org/jira/browse/WICKET-579), but since it requires
changing core classes, I wouldn't suggest anybody implement it before it is
an accepted patch.  (but maybe some support from others will help it get
accepted).

Kurt


James McLaughlin-3 wrote:
> 
> The purpose of size() is to give the DataView an idea of how many
> pages there will be, so this really won't work. You should fetch size
> in a separate query as the number of orders total over all pages, and
> cache that.
> 
> best,
> jim
> 
> On 5/29/07, V. Jenks <[EMAIL PROTECTED]> wrote:
>>
>> I'm trying to use a provider class for a DataView so I can do
>> paging/sorting,
>> etc.  It looks like this:
>>
>> ************************************************
>> public class OrderProvider implements IDataProvider
>> {
>>         private transient List<Order> orders;
>>
>>         public OrderProvider()
>>         {
>>         }
>>
>>         public Iterator iterator(int first, int count)
>>         {
>>                 this.orders =
>> WicketHelper.<List<Order>>getDetachedModelObject(
>>                                 OrderProxy.getAll(first, first + count));
>>
>>                 return this.orders.iterator();
>>         }
>>
>>         public IModel model(Object model)
>>         {
>>                 return WicketHelper.getDetachedModel(model);
>>         }
>>
>>         public int size()
>>         {
>>                 return this.orders.size();
>>         }
>> }
>> ************************************************
>>
>> I thought this would work but it looks like size() is called first, since
>> I
>> get a NPE:
>>
>> ************************************************
>> Caused by: java.lang.NullPointerException
>>         at com.myapp.provider.OrderProvider.size(OrderProvider.java:36)
>> ************************************************
>>
>> It works if size() makes a call to the database to get a count of
>> records...but I'm trying to use a global field to prevent that data call.
>>
>> Any suggestions?
>> --
>> View this message in context:
>> http://www.nabble.com/Chicken-and-egg-w--Data-Provider-tf3834369.html#a10855464
>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>
>>
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by DB2 Express
>> Download DB2 Express C - the FREE version of DB2 express and take
>> control of your XML. No limits. Just data. Click to get it now.
>> http://sourceforge.net/powerbar/db2/
>> _______________________________________________
>> Wicket-user mailing list
>> Wicket-user@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/wicket-user
>>
> 
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> Wicket-user mailing list
> Wicket-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wicket-user
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Chicken-and-egg-w--Data-Provider-tf3834369.html#a10875427
Sent from the Wicket - User mailing list archive at Nabble.com.


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to