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]