Wouldn't the former approach have more overahead since it would first load
the Contact (when the getmodelobject() is called) and than the deletion
operation..
The later one atleast just does the deletion in one call though based on its
primary key..
igor.vaynberg wrote:
>
> 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]
>
>
>
--
View this message in context:
http://www.nabble.com/Confused-with-IDataProvider-tp15039652p15057496.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]