1) when the page is opened the second time there will not be N
selects, next time please confirm that it is indeed the case before
posting to this list. it is not the case because when the page is
opened the second time the items in dataview are discarded and
recreated in the exact same manner as when the page was opened the
first time...

2) why the detachable model is there:
in order to identify an entity in the database you use its primary
key. the contactdetachablemodel is like that primary key. lets assume
in your dataview.populateitem() you do

item.add(new link("delete", item.getmodel()) { onclick() {
dao.delete(getmodelobject()); }});

that link needs to be tied to the contact it needs to delete
somehow...how do you do that. well you can use the model like i did
above, or you can do

populateitem(item item) {
  Contact c=item.getModelObject();
  item.add(new link("delete", new model(c.getid()) { onclick() {
dao.deletebypk(getmodelobject()); }});

but this breaks encapsulation because you need to know what contact's
primary key is, it is much easier to deal with an imodel and not care.
also if you need to pass this contact down to a panel, that panel can
also just take an imodel and be able to retrieve that contact on
subsequent requests without having to know how to do that via a
primary key. makes sense?

to sum up: the contactdetachablemodel is like an abstraction to a
primary key and a way to retrieve the contact by its primary key.

-igor

On Jan 23, 2008 3:29 AM, beam <[EMAIL PROTECTED]> wrote:
>
> Hello everybody!
> There is a page PagingPage in Wicket Examples(repeater folder)
> And this page contain next code:
> DataView dataView = new DataView("pageable", new ContactDataProvider())
>
> ContactDataProvider implements method iterator:
>
>         public Iterator iterator(int first, int count)
>         {
>                 return getContactsDB().find(first, count, "firstName", 
> true).iterator();
>         }
> It returns List of Contacts.
>
> And there is next code:
>         /**
>          * wraps retrieved contact pojo with a wicket model
>          *
>          * @see
> org.apache.wicket.markup.repeater.data.IDataProvider#model(java.lang.Object)
>          */
>         public IModel model(Object object)
>         {
>                 return new DetachableContactModel((Contact)object);
>         }
> So why we need to wrap every item of this List to DetachableContactModel.
> When page open in a first time  there will be only on SELECT request to
> Database(iterator(int first, int count) -> SELECT * FROM Contacts LIMIT
> first, count)). But when page will open in a second time there will be N
> SELECTs (where N == count) for every Contact object in
> DetachableContactModel because it calls method load().
>
> So I don't understand why wrap items(Contact in this example) to
> DetachableContactModel? One select to retrieve all Contact on the page
> better than N SELECTs, isn't it?
>
> P.S. Sorry for my bad english
> --
> View this message in context: 
> http://www.nabble.com/Confused-with-IDataProvider-tp15039652p15039652.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]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to