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