You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Vasu Srinivasan <va...@gmail.com> on 2009/05/26 18:38:22 UTC

Refreshing a list while using ListDataProvider

Hello:
I have a simple search form , where some criteria refreshes the table based
on the db. I got it working with ListView, but im trying to use
ListDataProvider, I feel missing something:

class MyForm {
  List myList;
  MyDataView myDataView;
  MyDataProvider myDataProvider;

  public MyForm() {
    @Override public void onSubmit() {
       myList  = refreshData(criteria);
       //Question: How do I set this list into the myDataView or
myDataProvider ? I thought myDataView or the provider will auto pick it up,
because its a member variable and is a RefreshingView
    }

    //First time
    myList = refreshData(defaultCriteria);
    myDataView = new MyDataView("myDataView" , new MyDataProvider(myList));
    add(myListView);
  }
}


class MyDataView extends DataView {
   public MyDataView(String id, IDataProvider provider) { super(id,
provider); }

   @Override public void populateItem(Item item) { .... }
}

class MyDataProvider extends ListDataProvider {
  public MyDataProvider(List list) {
     super(list);
  }
}

I looked at the example that uses ListView
http://cwiki.apache.org/WICKET/reading-from-a-database.html
<http://cwiki.apache.org/WICKET/reading-from-a-database.html>

With ListView it works fine if I do this in the method onSubmit()

myList = refreshData(criteria);
myListView.setList(myList);

But with DataView, I do not have a set method to reset the new list obtained
based on the criteria. The db returns correct data, but the page displays
the old data (no change). Neither do I see a method to set the new list in
the ListDataProvider.

I even tried adding a new view inside the onSubmit, but that doesnt work
either:

myDataView = new MyDataView("myDataView", new MyDataProvider(newList));

-- 
Thanks!
Vasu Srinivasan

Re: Refreshing a list while using ListDataProvider

Posted by Igor Vaynberg <ig...@gmail.com>.
like i said you can roll your own provider that can work with new
instances of list. it is very simple.

class mysuperprovider implements idataprovider {
  private transient List list;
  private list query() {
     if (list==null) { list=querywhatever(); }
   }
   public iterator itereator() { return query().itearator(); }
   public int size() { return query().size(); }
   public void detach() { list=null; }
}

-igor

On Wed, May 27, 2009 at 7:54 AM, Vasu Srinivasan <va...@gmail.com> wrote:
> Rereading the link
> http://cwiki.apache.org/WICKET/reading-from-a-database.html
> <http://cwiki.apache.org/WICKET/reading-from-a-database.html>
>
> clearly says that the objects are created only once, this includes the List
> results i guess. But the line --
>
> results = getResultsFromCriteria(criteria);
>
> is kinda misleading.. In this case the results should never be a new
> ArrayList object for DataView to work. (If using ListView, the setList must
> be used).
>
> For eg, when using Spring's JdbcTemplate.queryForList() it always returns a
> new list object. To make DataView work, this is probably what should happen:
>
> List tempResult = getResultsFromCriteria(criteria);
> results.clear();
> results.addAll(tempResult);
>
> Pls correct me if im wrong...
>
>
> On Tue, May 26, 2009 at 4:48 PM, Vasu Srinivasan <va...@gmail.com> wrote:
>
>> Ok I think I am understanding it a little better now.
>> For now Im still extending myDataProvider  from ListDataProvider, but no
>> longer using  a new ArrayList() for every search. Im clearing it out and
>> adding new data, which is okay.
>>
>> One question though -- What is the responsibility scope of the
>> ListDataProvider / IDataProvider?
>>
>> Am I correct in assuming the following --
>>
>> 1) only operate on the given List/Data (already manipulated)
>> 2) *should not* contain a Dao, and refresh its own list/data.
>>
>> Because if (2), then I am seeing an issue -- where do I call the
>> dao.query() ? In the constructor or in the iterator() ? If I do in the
>> constructor, its not refreshed for further queries. If I do in the
>> iterator(), then the size() is queried before the DataView calls the
>>  iterator(), so it always returns 0 records for the first time. And also
>> calling dao.query() in the iterator() will make it query the whole list for
>> every pagination, which is probably not a good idea.
>>
>> I liked the idea of dataprovider encapsulating dao, but not clear where
>> would I refresh it.
>> Thanks !
>> Vasya
>>
>> On Tue, May 26, 2009 at 3:25 PM, Igor Vaynberg <ig...@gmail.com>wrote:
>>
>>> i meant implement IDataProvider directly if ListDataProvider doesnt
>>> work for you. most of the time you modify an existing instance of
>>> List, not create a new one, so ListDataProvider is useful there.
>>>
>>> -igor
>>>
>>> On Tue, May 26, 2009 at 1:15 PM, Vasu Srinivasan <va...@gmail.com>
>>> wrote:
>>> > Thanks for the reply ...
>>> >
>>> > I tried doing this :
>>> > class MyDataProvider extends  ListDataProvider {
>>> >
>>> >  DataDao dataDao;
>>> >  Criteria criteria;
>>> >
>>> >  public MyDataProvider(List list, Criteria criteria) {
>>> >      super(list);
>>> >       ...
>>> >  }
>>> >
>>> >  //providing my own iterator which goes to the dataDao and gets the data
>>> >  //But now I cannot set the list, because private... So I have to use my
>>> > own list member...If I do that, then what is the point of calling the
>>> > constructor with List?
>>> > }
>>> >
>>> > Looks like ListDataProvider is not useful for reusable Lists. Not sure
>>> why
>>> > this should be so ? If I am able to set a new List into the provider, I
>>> > would not be breaking anything because the data is anyway retrieved only
>>> via
>>> > an Iterator.
>>> >
>>> > The problem is even if I create a new ListDataProvider for every new
>>> list, I
>>> > am not able to set that again in my data view. DataView does not have
>>> any
>>> > thing similar to setList (a la ListView.setList). I dont think I should
>>> be
>>> > creating a new DataView for every search, because all i'm doing is only
>>> > changing contents of the underlying list.
>>> >
>>> > Am I missing something ?
>>> >
>>> >
>>> > On Tue, May 26, 2009 at 12:29 PM, Igor Vaynberg <
>>> igor.vaynberg@gmail.com>wrote:
>>> >
>>> >> you can build your own analog of listdataprovider that pulls the list
>>> >> directly from whatever property contains the latest.
>>> >>
>>> >> -igor
>>> >>
>>> >> On Tue, May 26, 2009 at 9:38 AM, Vasu Srinivasan <va...@gmail.com>
>>> >> wrote:
>>> >> > Hello:
>>> >> > I have a simple search form , where some criteria refreshes the table
>>> >> based
>>> >> > on the db. I got it working with ListView, but im trying to use
>>> >> > ListDataProvider, I feel missing something:
>>> >> >
>>> >> > class MyForm {
>>> >> >  List myList;
>>> >> >  MyDataView myDataView;
>>> >> >  MyDataProvider myDataProvider;
>>> >> >
>>> >> >  public MyForm() {
>>> >> >    @Override public void onSubmit() {
>>> >> >       myList  = refreshData(criteria);
>>> >> >       //Question: How do I set this list into the myDataView or
>>> >> > myDataProvider ? I thought myDataView or the provider will auto pick
>>> it
>>> >> up,
>>> >> > because its a member variable and is a RefreshingView
>>> >> >    }
>>> >> >
>>> >> >    //First time
>>> >> >    myList = refreshData(defaultCriteria);
>>> >> >    myDataView = new MyDataView("myDataView" , new
>>> >> MyDataProvider(myList));
>>> >> >    add(myListView);
>>> >> >  }
>>> >> > }
>>> >> >
>>> >> >
>>> >> > class MyDataView extends DataView {
>>> >> >   public MyDataView(String id, IDataProvider provider) { super(id,
>>> >> > provider); }
>>> >> >
>>> >> >   @Override public void populateItem(Item item) { .... }
>>> >> > }
>>> >> >
>>> >> > class MyDataProvider extends ListDataProvider {
>>> >> >  public MyDataProvider(List list) {
>>> >> >     super(list);
>>> >> >  }
>>> >> > }
>>> >> >
>>> >> > I looked at the example that uses ListView
>>> >> > http://cwiki.apache.org/WICKET/reading-from-a-database.html
>>> >> > <http://cwiki.apache.org/WICKET/reading-from-a-database.html>
>>> >> >
>>> >> > With ListView it works fine if I do this in the method onSubmit()
>>> >> >
>>> >> > myList = refreshData(criteria);
>>> >> > myListView.setList(myList);
>>> >> >
>>> >> > But with DataView, I do not have a set method to reset the new list
>>> >> obtained
>>> >> > based on the criteria. The db returns correct data, but the page
>>> displays
>>> >> > the old data (no change). Neither do I see a method to set the new
>>> list
>>> >> in
>>> >> > the ListDataProvider.
>>> >> >
>>> >> > I even tried adding a new view inside the onSubmit, but that doesnt
>>> work
>>> >> > either:
>>> >> >
>>> >> > myDataView = new MyDataView("myDataView", new
>>> MyDataProvider(newList));
>>> >> >
>>> >> > --
>>> >> > Thanks!
>>> >> > Vasu Srinivasan
>>> >> >
>>> >>
>>> >> ---------------------------------------------------------------------
>>> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>>> >> For additional commands, e-mail: users-help@wicket.apache.org
>>> >>
>>> >>
>>> >
>>> >
>>> > --
>>> > Regards,
>>> > Vasu Srinivasan
>>> >
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>>> For additional commands, e-mail: users-help@wicket.apache.org
>>>
>>>
>>
>>
>> --
>> Regards,
>> Vasu Srinivasan
>>
>
>
>
> --
> Regards,
> Vasu Srinivasan
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Refreshing a list while using ListDataProvider

Posted by Vasu Srinivasan <va...@gmail.com>.
Rereading the link
http://cwiki.apache.org/WICKET/reading-from-a-database.html
<http://cwiki.apache.org/WICKET/reading-from-a-database.html>

clearly says that the objects are created only once, this includes the List
results i guess. But the line --

results = getResultsFromCriteria(criteria);

is kinda misleading.. In this case the results should never be a new
ArrayList object for DataView to work. (If using ListView, the setList must
be used).

For eg, when using Spring's JdbcTemplate.queryForList() it always returns a
new list object. To make DataView work, this is probably what should happen:

List tempResult = getResultsFromCriteria(criteria);
results.clear();
results.addAll(tempResult);

Pls correct me if im wrong...


On Tue, May 26, 2009 at 4:48 PM, Vasu Srinivasan <va...@gmail.com> wrote:

> Ok I think I am understanding it a little better now.
> For now Im still extending myDataProvider  from ListDataProvider, but no
> longer using  a new ArrayList() for every search. Im clearing it out and
> adding new data, which is okay.
>
> One question though -- What is the responsibility scope of the
> ListDataProvider / IDataProvider?
>
> Am I correct in assuming the following --
>
> 1) only operate on the given List/Data (already manipulated)
> 2) *should not* contain a Dao, and refresh its own list/data.
>
> Because if (2), then I am seeing an issue -- where do I call the
> dao.query() ? In the constructor or in the iterator() ? If I do in the
> constructor, its not refreshed for further queries. If I do in the
> iterator(), then the size() is queried before the DataView calls the
>  iterator(), so it always returns 0 records for the first time. And also
> calling dao.query() in the iterator() will make it query the whole list for
> every pagination, which is probably not a good idea.
>
> I liked the idea of dataprovider encapsulating dao, but not clear where
> would I refresh it.
> Thanks !
> Vasya
>
> On Tue, May 26, 2009 at 3:25 PM, Igor Vaynberg <ig...@gmail.com>wrote:
>
>> i meant implement IDataProvider directly if ListDataProvider doesnt
>> work for you. most of the time you modify an existing instance of
>> List, not create a new one, so ListDataProvider is useful there.
>>
>> -igor
>>
>> On Tue, May 26, 2009 at 1:15 PM, Vasu Srinivasan <va...@gmail.com>
>> wrote:
>> > Thanks for the reply ...
>> >
>> > I tried doing this :
>> > class MyDataProvider extends  ListDataProvider {
>> >
>> >  DataDao dataDao;
>> >  Criteria criteria;
>> >
>> >  public MyDataProvider(List list, Criteria criteria) {
>> >      super(list);
>> >       ...
>> >  }
>> >
>> >  //providing my own iterator which goes to the dataDao and gets the data
>> >  //But now I cannot set the list, because private... So I have to use my
>> > own list member...If I do that, then what is the point of calling the
>> > constructor with List?
>> > }
>> >
>> > Looks like ListDataProvider is not useful for reusable Lists. Not sure
>> why
>> > this should be so ? If I am able to set a new List into the provider, I
>> > would not be breaking anything because the data is anyway retrieved only
>> via
>> > an Iterator.
>> >
>> > The problem is even if I create a new ListDataProvider for every new
>> list, I
>> > am not able to set that again in my data view. DataView does not have
>> any
>> > thing similar to setList (a la ListView.setList). I dont think I should
>> be
>> > creating a new DataView for every search, because all i'm doing is only
>> > changing contents of the underlying list.
>> >
>> > Am I missing something ?
>> >
>> >
>> > On Tue, May 26, 2009 at 12:29 PM, Igor Vaynberg <
>> igor.vaynberg@gmail.com>wrote:
>> >
>> >> you can build your own analog of listdataprovider that pulls the list
>> >> directly from whatever property contains the latest.
>> >>
>> >> -igor
>> >>
>> >> On Tue, May 26, 2009 at 9:38 AM, Vasu Srinivasan <va...@gmail.com>
>> >> wrote:
>> >> > Hello:
>> >> > I have a simple search form , where some criteria refreshes the table
>> >> based
>> >> > on the db. I got it working with ListView, but im trying to use
>> >> > ListDataProvider, I feel missing something:
>> >> >
>> >> > class MyForm {
>> >> >  List myList;
>> >> >  MyDataView myDataView;
>> >> >  MyDataProvider myDataProvider;
>> >> >
>> >> >  public MyForm() {
>> >> >    @Override public void onSubmit() {
>> >> >       myList  = refreshData(criteria);
>> >> >       //Question: How do I set this list into the myDataView or
>> >> > myDataProvider ? I thought myDataView or the provider will auto pick
>> it
>> >> up,
>> >> > because its a member variable and is a RefreshingView
>> >> >    }
>> >> >
>> >> >    //First time
>> >> >    myList = refreshData(defaultCriteria);
>> >> >    myDataView = new MyDataView("myDataView" , new
>> >> MyDataProvider(myList));
>> >> >    add(myListView);
>> >> >  }
>> >> > }
>> >> >
>> >> >
>> >> > class MyDataView extends DataView {
>> >> >   public MyDataView(String id, IDataProvider provider) { super(id,
>> >> > provider); }
>> >> >
>> >> >   @Override public void populateItem(Item item) { .... }
>> >> > }
>> >> >
>> >> > class MyDataProvider extends ListDataProvider {
>> >> >  public MyDataProvider(List list) {
>> >> >     super(list);
>> >> >  }
>> >> > }
>> >> >
>> >> > I looked at the example that uses ListView
>> >> > http://cwiki.apache.org/WICKET/reading-from-a-database.html
>> >> > <http://cwiki.apache.org/WICKET/reading-from-a-database.html>
>> >> >
>> >> > With ListView it works fine if I do this in the method onSubmit()
>> >> >
>> >> > myList = refreshData(criteria);
>> >> > myListView.setList(myList);
>> >> >
>> >> > But with DataView, I do not have a set method to reset the new list
>> >> obtained
>> >> > based on the criteria. The db returns correct data, but the page
>> displays
>> >> > the old data (no change). Neither do I see a method to set the new
>> list
>> >> in
>> >> > the ListDataProvider.
>> >> >
>> >> > I even tried adding a new view inside the onSubmit, but that doesnt
>> work
>> >> > either:
>> >> >
>> >> > myDataView = new MyDataView("myDataView", new
>> MyDataProvider(newList));
>> >> >
>> >> > --
>> >> > Thanks!
>> >> > Vasu Srinivasan
>> >> >
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> >> For additional commands, e-mail: users-help@wicket.apache.org
>> >>
>> >>
>> >
>> >
>> > --
>> > Regards,
>> > Vasu Srinivasan
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>
>
> --
> Regards,
> Vasu Srinivasan
>



-- 
Regards,
Vasu Srinivasan

Re: Refreshing a list while using ListDataProvider

Posted by Vasu Srinivasan <va...@gmail.com>.
Ok I think I am understanding it a little better now.
For now Im still extending myDataProvider  from ListDataProvider, but no
longer using  a new ArrayList() for every search. Im clearing it out and
adding new data, which is okay.

One question though -- What is the responsibility scope of the
ListDataProvider / IDataProvider?

Am I correct in assuming the following --

1) only operate on the given List/Data (already manipulated)
2) *should not* contain a Dao, and refresh its own list/data.

Because if (2), then I am seeing an issue -- where do I call the dao.query()
? In the constructor or in the iterator() ? If I do in the constructor, its
not refreshed for further queries. If I do in the iterator(), then the
size() is queried before the DataView calls the  iterator(), so it always
returns 0 records for the first time. And also calling dao.query() in the
iterator() will make it query the whole list for every pagination, which is
probably not a good idea.

I liked the idea of dataprovider encapsulating dao, but not clear where
would I refresh it.
Thanks !
Vasya

On Tue, May 26, 2009 at 3:25 PM, Igor Vaynberg <ig...@gmail.com>wrote:

> i meant implement IDataProvider directly if ListDataProvider doesnt
> work for you. most of the time you modify an existing instance of
> List, not create a new one, so ListDataProvider is useful there.
>
> -igor
>
> On Tue, May 26, 2009 at 1:15 PM, Vasu Srinivasan <va...@gmail.com>
> wrote:
> > Thanks for the reply ...
> >
> > I tried doing this :
> > class MyDataProvider extends  ListDataProvider {
> >
> >  DataDao dataDao;
> >  Criteria criteria;
> >
> >  public MyDataProvider(List list, Criteria criteria) {
> >      super(list);
> >       ...
> >  }
> >
> >  //providing my own iterator which goes to the dataDao and gets the data
> >  //But now I cannot set the list, because private... So I have to use my
> > own list member...If I do that, then what is the point of calling the
> > constructor with List?
> > }
> >
> > Looks like ListDataProvider is not useful for reusable Lists. Not sure
> why
> > this should be so ? If I am able to set a new List into the provider, I
> > would not be breaking anything because the data is anyway retrieved only
> via
> > an Iterator.
> >
> > The problem is even if I create a new ListDataProvider for every new
> list, I
> > am not able to set that again in my data view. DataView does not have any
> > thing similar to setList (a la ListView.setList). I dont think I should
> be
> > creating a new DataView for every search, because all i'm doing is only
> > changing contents of the underlying list.
> >
> > Am I missing something ?
> >
> >
> > On Tue, May 26, 2009 at 12:29 PM, Igor Vaynberg <igor.vaynberg@gmail.com
> >wrote:
> >
> >> you can build your own analog of listdataprovider that pulls the list
> >> directly from whatever property contains the latest.
> >>
> >> -igor
> >>
> >> On Tue, May 26, 2009 at 9:38 AM, Vasu Srinivasan <va...@gmail.com>
> >> wrote:
> >> > Hello:
> >> > I have a simple search form , where some criteria refreshes the table
> >> based
> >> > on the db. I got it working with ListView, but im trying to use
> >> > ListDataProvider, I feel missing something:
> >> >
> >> > class MyForm {
> >> >  List myList;
> >> >  MyDataView myDataView;
> >> >  MyDataProvider myDataProvider;
> >> >
> >> >  public MyForm() {
> >> >    @Override public void onSubmit() {
> >> >       myList  = refreshData(criteria);
> >> >       //Question: How do I set this list into the myDataView or
> >> > myDataProvider ? I thought myDataView or the provider will auto pick
> it
> >> up,
> >> > because its a member variable and is a RefreshingView
> >> >    }
> >> >
> >> >    //First time
> >> >    myList = refreshData(defaultCriteria);
> >> >    myDataView = new MyDataView("myDataView" , new
> >> MyDataProvider(myList));
> >> >    add(myListView);
> >> >  }
> >> > }
> >> >
> >> >
> >> > class MyDataView extends DataView {
> >> >   public MyDataView(String id, IDataProvider provider) { super(id,
> >> > provider); }
> >> >
> >> >   @Override public void populateItem(Item item) { .... }
> >> > }
> >> >
> >> > class MyDataProvider extends ListDataProvider {
> >> >  public MyDataProvider(List list) {
> >> >     super(list);
> >> >  }
> >> > }
> >> >
> >> > I looked at the example that uses ListView
> >> > http://cwiki.apache.org/WICKET/reading-from-a-database.html
> >> > <http://cwiki.apache.org/WICKET/reading-from-a-database.html>
> >> >
> >> > With ListView it works fine if I do this in the method onSubmit()
> >> >
> >> > myList = refreshData(criteria);
> >> > myListView.setList(myList);
> >> >
> >> > But with DataView, I do not have a set method to reset the new list
> >> obtained
> >> > based on the criteria. The db returns correct data, but the page
> displays
> >> > the old data (no change). Neither do I see a method to set the new
> list
> >> in
> >> > the ListDataProvider.
> >> >
> >> > I even tried adding a new view inside the onSubmit, but that doesnt
> work
> >> > either:
> >> >
> >> > myDataView = new MyDataView("myDataView", new
> MyDataProvider(newList));
> >> >
> >> > --
> >> > Thanks!
> >> > Vasu Srinivasan
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> >> For additional commands, e-mail: users-help@wicket.apache.org
> >>
> >>
> >
> >
> > --
> > Regards,
> > Vasu Srinivasan
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>


-- 
Regards,
Vasu Srinivasan

Re: Refreshing a list while using ListDataProvider

Posted by Igor Vaynberg <ig...@gmail.com>.
i meant implement IDataProvider directly if ListDataProvider doesnt
work for you. most of the time you modify an existing instance of
List, not create a new one, so ListDataProvider is useful there.

-igor

On Tue, May 26, 2009 at 1:15 PM, Vasu Srinivasan <va...@gmail.com> wrote:
> Thanks for the reply ...
>
> I tried doing this :
> class MyDataProvider extends  ListDataProvider {
>
>  DataDao dataDao;
>  Criteria criteria;
>
>  public MyDataProvider(List list, Criteria criteria) {
>      super(list);
>       ...
>  }
>
>  //providing my own iterator which goes to the dataDao and gets the data
>  //But now I cannot set the list, because private... So I have to use my
> own list member...If I do that, then what is the point of calling the
> constructor with List?
> }
>
> Looks like ListDataProvider is not useful for reusable Lists. Not sure why
> this should be so ? If I am able to set a new List into the provider, I
> would not be breaking anything because the data is anyway retrieved only via
> an Iterator.
>
> The problem is even if I create a new ListDataProvider for every new list, I
> am not able to set that again in my data view. DataView does not have any
> thing similar to setList (a la ListView.setList). I dont think I should be
> creating a new DataView for every search, because all i'm doing is only
> changing contents of the underlying list.
>
> Am I missing something ?
>
>
> On Tue, May 26, 2009 at 12:29 PM, Igor Vaynberg <ig...@gmail.com>wrote:
>
>> you can build your own analog of listdataprovider that pulls the list
>> directly from whatever property contains the latest.
>>
>> -igor
>>
>> On Tue, May 26, 2009 at 9:38 AM, Vasu Srinivasan <va...@gmail.com>
>> wrote:
>> > Hello:
>> > I have a simple search form , where some criteria refreshes the table
>> based
>> > on the db. I got it working with ListView, but im trying to use
>> > ListDataProvider, I feel missing something:
>> >
>> > class MyForm {
>> >  List myList;
>> >  MyDataView myDataView;
>> >  MyDataProvider myDataProvider;
>> >
>> >  public MyForm() {
>> >    @Override public void onSubmit() {
>> >       myList  = refreshData(criteria);
>> >       //Question: How do I set this list into the myDataView or
>> > myDataProvider ? I thought myDataView or the provider will auto pick it
>> up,
>> > because its a member variable and is a RefreshingView
>> >    }
>> >
>> >    //First time
>> >    myList = refreshData(defaultCriteria);
>> >    myDataView = new MyDataView("myDataView" , new
>> MyDataProvider(myList));
>> >    add(myListView);
>> >  }
>> > }
>> >
>> >
>> > class MyDataView extends DataView {
>> >   public MyDataView(String id, IDataProvider provider) { super(id,
>> > provider); }
>> >
>> >   @Override public void populateItem(Item item) { .... }
>> > }
>> >
>> > class MyDataProvider extends ListDataProvider {
>> >  public MyDataProvider(List list) {
>> >     super(list);
>> >  }
>> > }
>> >
>> > I looked at the example that uses ListView
>> > http://cwiki.apache.org/WICKET/reading-from-a-database.html
>> > <http://cwiki.apache.org/WICKET/reading-from-a-database.html>
>> >
>> > With ListView it works fine if I do this in the method onSubmit()
>> >
>> > myList = refreshData(criteria);
>> > myListView.setList(myList);
>> >
>> > But with DataView, I do not have a set method to reset the new list
>> obtained
>> > based on the criteria. The db returns correct data, but the page displays
>> > the old data (no change). Neither do I see a method to set the new list
>> in
>> > the ListDataProvider.
>> >
>> > I even tried adding a new view inside the onSubmit, but that doesnt work
>> > either:
>> >
>> > myDataView = new MyDataView("myDataView", new MyDataProvider(newList));
>> >
>> > --
>> > Thanks!
>> > Vasu Srinivasan
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>
>
> --
> Regards,
> Vasu Srinivasan
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Refreshing a list while using ListDataProvider

Posted by Vasu Srinivasan <va...@gmail.com>.
Thanks for the reply ...

I tried doing this :
class MyDataProvider extends  ListDataProvider {

  DataDao dataDao;
  Criteria criteria;

  public MyDataProvider(List list, Criteria criteria) {
      super(list);
       ...
  }

  //providing my own iterator which goes to the dataDao and gets the data
  //But now I cannot set the list, because private... So I have to use my
own list member...If I do that, then what is the point of calling the
constructor with List?
}

Looks like ListDataProvider is not useful for reusable Lists. Not sure why
this should be so ? If I am able to set a new List into the provider, I
would not be breaking anything because the data is anyway retrieved only via
an Iterator.

The problem is even if I create a new ListDataProvider for every new list, I
am not able to set that again in my data view. DataView does not have any
thing similar to setList (a la ListView.setList). I dont think I should be
creating a new DataView for every search, because all i'm doing is only
changing contents of the underlying list.

Am I missing something ?


On Tue, May 26, 2009 at 12:29 PM, Igor Vaynberg <ig...@gmail.com>wrote:

> you can build your own analog of listdataprovider that pulls the list
> directly from whatever property contains the latest.
>
> -igor
>
> On Tue, May 26, 2009 at 9:38 AM, Vasu Srinivasan <va...@gmail.com>
> wrote:
> > Hello:
> > I have a simple search form , where some criteria refreshes the table
> based
> > on the db. I got it working with ListView, but im trying to use
> > ListDataProvider, I feel missing something:
> >
> > class MyForm {
> >  List myList;
> >  MyDataView myDataView;
> >  MyDataProvider myDataProvider;
> >
> >  public MyForm() {
> >    @Override public void onSubmit() {
> >       myList  = refreshData(criteria);
> >       //Question: How do I set this list into the myDataView or
> > myDataProvider ? I thought myDataView or the provider will auto pick it
> up,
> > because its a member variable and is a RefreshingView
> >    }
> >
> >    //First time
> >    myList = refreshData(defaultCriteria);
> >    myDataView = new MyDataView("myDataView" , new
> MyDataProvider(myList));
> >    add(myListView);
> >  }
> > }
> >
> >
> > class MyDataView extends DataView {
> >   public MyDataView(String id, IDataProvider provider) { super(id,
> > provider); }
> >
> >   @Override public void populateItem(Item item) { .... }
> > }
> >
> > class MyDataProvider extends ListDataProvider {
> >  public MyDataProvider(List list) {
> >     super(list);
> >  }
> > }
> >
> > I looked at the example that uses ListView
> > http://cwiki.apache.org/WICKET/reading-from-a-database.html
> > <http://cwiki.apache.org/WICKET/reading-from-a-database.html>
> >
> > With ListView it works fine if I do this in the method onSubmit()
> >
> > myList = refreshData(criteria);
> > myListView.setList(myList);
> >
> > But with DataView, I do not have a set method to reset the new list
> obtained
> > based on the criteria. The db returns correct data, but the page displays
> > the old data (no change). Neither do I see a method to set the new list
> in
> > the ListDataProvider.
> >
> > I even tried adding a new view inside the onSubmit, but that doesnt work
> > either:
> >
> > myDataView = new MyDataView("myDataView", new MyDataProvider(newList));
> >
> > --
> > Thanks!
> > Vasu Srinivasan
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>


-- 
Regards,
Vasu Srinivasan

Re: Refreshing a list while using ListDataProvider

Posted by Igor Vaynberg <ig...@gmail.com>.
you can build your own analog of listdataprovider that pulls the list
directly from whatever property contains the latest.

-igor

On Tue, May 26, 2009 at 9:38 AM, Vasu Srinivasan <va...@gmail.com> wrote:
> Hello:
> I have a simple search form , where some criteria refreshes the table based
> on the db. I got it working with ListView, but im trying to use
> ListDataProvider, I feel missing something:
>
> class MyForm {
>  List myList;
>  MyDataView myDataView;
>  MyDataProvider myDataProvider;
>
>  public MyForm() {
>    @Override public void onSubmit() {
>       myList  = refreshData(criteria);
>       //Question: How do I set this list into the myDataView or
> myDataProvider ? I thought myDataView or the provider will auto pick it up,
> because its a member variable and is a RefreshingView
>    }
>
>    //First time
>    myList = refreshData(defaultCriteria);
>    myDataView = new MyDataView("myDataView" , new MyDataProvider(myList));
>    add(myListView);
>  }
> }
>
>
> class MyDataView extends DataView {
>   public MyDataView(String id, IDataProvider provider) { super(id,
> provider); }
>
>   @Override public void populateItem(Item item) { .... }
> }
>
> class MyDataProvider extends ListDataProvider {
>  public MyDataProvider(List list) {
>     super(list);
>  }
> }
>
> I looked at the example that uses ListView
> http://cwiki.apache.org/WICKET/reading-from-a-database.html
> <http://cwiki.apache.org/WICKET/reading-from-a-database.html>
>
> With ListView it works fine if I do this in the method onSubmit()
>
> myList = refreshData(criteria);
> myListView.setList(myList);
>
> But with DataView, I do not have a set method to reset the new list obtained
> based on the criteria. The db returns correct data, but the page displays
> the old data (no change). Neither do I see a method to set the new list in
> the ListDataProvider.
>
> I even tried adding a new view inside the onSubmit, but that doesnt work
> either:
>
> myDataView = new MyDataView("myDataView", new MyDataProvider(newList));
>
> --
> Thanks!
> Vasu Srinivasan
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Refreshing a list while using ListDataProvider

Posted by Andreas Petersson <an...@petersson.at>.
Vasu Srinivasan schrieb:
> Hello:
> I have a simple search form , where some criteria refreshes the table based
> on the db. I got it working with ListView, but im trying to use
> ListDataProvider, I feel missing something:
>   
the trick that worked for me:
just re-use the existing list instance.

final List l = ...
new ListDataProvider(l);

..then in an ajax button l.clear();
l.add(stuff)...

so just use the instance , the ListDataProvider will pick up the changes.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org