using an LDM is best practice, big or small...

-igor

On Thu, Oct 2, 2008 at 11:09 AM, Jürgen Lind <[EMAIL PROTECTED]> wrote:
> I see. So for a small application with few users, the approach might be
> ok if I can live with a higher memory consumption. For larger
> applications, using a loadable detachable model would be preferable.
>
> Thank you for the clarification.
>
> J.
>
>
> Igor Vaynberg wrote:
>>
>> yes, there is a huge fundamental problem with your approach: you keep
>> the object reference which means the object is serialized instead of
>> being retrieved through a loadable detachable model.
>>
>> -igor
>>
>> On Thu, Oct 2, 2008 at 10:54 AM, Jürgen Lind <[EMAIL PROTECTED]>
>> wrote:
>>>
>>> Thanks for the explanation. Still, one questions remains: is there
>>> a fundamental problem with the first approach or is it ok to use
>>> the object directly?
>>>
>>> J.
>>>
>>> Igor Vaynberg wrote:
>>>>
>>>> final TestItem itemModel = (TestItem) item.getModelObject();
>>>>
>>>> ^ on this line you retrieve the object from the model, you then use
>>>> this reference inside the onclick() which is called during another
>>>> request. since you use the model object reference directly it is not
>>>> loaded from the model.
>>>>
>>>> my code, on the other hand, never keeps a direct reference to the
>>>> model object, instead it retrieves it from the model inside onclick()
>>>>
>>>> -igor
>>>>
>>>> On Thu, Oct 2, 2008 at 10:10 AM, Jürgen Lind <[EMAIL PROTECTED]>
>>>> wrote:
>>>>>
>>>>> Igor Vaynberg wrote:
>>>>>>
>>>>>> your link works on the object and not on the model, instead
>>>>>>
>>>>>> add(new link("delete", item.getmodel()) { onclick() {
>>>>>> delete(getmodelobject()); }});
>>>>>>
>>>>> Thank you for your quick reply.
>>>>>
>>>>> Well the code is roughly the same(?) as in Listing 5.12 of WiA and
>>>>> there
>>>>> a custom Model is used to illustrate the solution. However, I thought
>>>>> my
>>>>> test would show me the problem first... Using your code above, the
>>>>> effect is as expected, i.e. the "wrong" (new) item is returned to be
>>>>> deleted.
>>>>>
>>>>> Now, the question is, what is wrong with my first implementation?
>>>>> It would seem that the problem that is solved using a custom ItemModel
>>>>> does not even occur. Or does that code prevent wicket from effectively
>>>>> detaching model objects and should thus be avoided? What would be the
>>>>> best practice here?
>>>>>
>>>>>
>>>>> J.
>>>>>
>>>>>> -igor
>>>>>>
>>>>>> On Thu, Oct 2, 2008 at 9:04 AM, Jürgen Lind <[EMAIL PROTECTED]>
>>>>>> wrote:
>>>>>>>
>>>>>>> Hi there,
>>>>>>>
>>>>>>> I have been struggling for some time now to understand how
>>>>>>> LoadableDetachableModel and a ListView work together. The starting
>>>>>>> point
>>>>>>> was Chapter 5.5.2 of "Wicket in Action" where it is recommended to
>>>>>>> provide
>>>>>>> your own ItemModel if the underlying list changes frequently. To try
>>>>>>> out
>>>>>>> how Wicket behaves without such a custom ItemModel, I wrote the
>>>>>>> following
>>>>>>> Test:
>>>>>>>
>>>>>>> <body>
>>>>>>>  <em wicket:id="listview">
>>>>>>>  <span wicket:id="label"></span><a wicket:id="delete">delete</a>
>>>>>>>  </em>
>>>>>>> </body>
>>>>>>>
>>>>>>>
>>>>>>> LoadableDetachableModel model = new LoadableDetachableModel() {
>>>>>>>
>>>>>>>  @Override
>>>>>>>  protected Object load() {
>>>>>>>  System.out.println("load");
>>>>>>>  return Arrays.asList(new TestItem[] {
>>>>>>>     new TestItem("a" + Math.random()),
>>>>>>>     new TestItem("b" + Math.random()),
>>>>>>>     new TestItem("c" + Math.random()) });
>>>>>>>  }
>>>>>>>
>>>>>>>  protected void onDetach() {
>>>>>>>  System.out.println("detach");
>>>>>>>  }
>>>>>>>
>>>>>>> };
>>>>>>>
>>>>>>> ListView listview = new ListView("listview", model) {
>>>>>>>  protected void populateItem(ListItem item) {
>>>>>>>  final TestItem itemModel = (TestItem) item.getModelObject();
>>>>>>>  item.add(new Label("label", itemModel.toString()));
>>>>>>>  item.add(new Link("delete") {
>>>>>>>
>>>>>>>   @Override
>>>>>>>   public void onClick() {
>>>>>>>     System.out.println("Delete " + itemModel);
>>>>>>>   }
>>>>>>>  });
>>>>>>>  }
>>>>>>> };
>>>>>>>
>>>>>>> add(listview);
>>>>>>>
>>>>>>>
>>>>>>> Now, I would expect that when I hit the "delete" link, Wicket would
>>>>>>> call
>>>>>>> the
>>>>>>> "load" Method of the LoadableDetachableModel before printing
>>>>>>> "Delete..."
>>>>>>> as
>>>>>>> the
>>>>>>> default implementation will use the index and the list to determine
>>>>>>> the
>>>>>>> item
>>>>>>> to
>>>>>>> delete. To my surprise, however, the "Delete..." message is printed
>>>>>>> with
>>>>>>> the
>>>>>>> correct item and the "load" Method is called afterwards. In my
>>>>>>> understanding,
>>>>>>> this contradicts the idea of the LoadableDetachableModel since Wicket
>>>>>>> seems
>>>>>>> to
>>>>>>> have a copy of the original list somewhere so that it can determine
>>>>>>> the
>>>>>>> list
>>>>>>> item on which the action was invoked before loading the underlying
>>>>>>> list.
>>>>>>>
>>>>>>> Can someone spot my mistake?
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> J.
>>>>>>>
>>>>>>> --
>>>>>>> Dr. Jürgen Lind
>>>>>>> iteratec GmbH                Fon: +49 (0)89 614551-44
>>>>>>> Inselkammerstrasse 4         Fax: +49 (0)89 614551-10
>>>>>>> 82008 Unterhaching           Web: www.iteratec.de
>>>>>>>
>>>>>>> Sitz und Registergericht der iteratec GmbH: München HRB 113 519
>>>>>>> Geschäftsführer: Klaus Eberhardt, Mark Goerke, Inge Hanschke, Ralf
>>>>>>> Menzel
>>>>>>>
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> 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]
>>>>>>
>>>>> --
>>>>> Dr. Jürgen Lind
>>>>> iteratec GmbH                Fon: +49 (0)89 614551-44
>>>>> Inselkammerstrasse 4         Fax: +49 (0)89 614551-10
>>>>> 82008 Unterhaching           Web: www.iteratec.de
>>>>>
>>>>> Sitz und Registergericht der iteratec GmbH: München HRB 113 519
>>>>> Geschäftsführer: Klaus Eberhardt, Mark Goerke, Inge Hanschke, Ralf
>>>>> Menzel
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> 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]
>>>>
>>>
>>> --
>>> Dr. Jürgen Lind
>>> iteratec GmbH                Fon: +49 (0)89 614551-44
>>> Inselkammerstrasse 4         Fax: +49 (0)89 614551-10
>>> 82008 Unterhaching           Web: www.iteratec.de
>>>
>>> Sitz und Registergericht der iteratec GmbH: München HRB 113 519
>>> Geschäftsführer: Klaus Eberhardt, Mark Goerke, Inge Hanschke, Ralf Menzel
>>>
>>>
>>> ---------------------------------------------------------------------
>>> 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]
>>
>
> --
> Dr. Jürgen Lind
> iteratec GmbH                Fon: +49 (0)89 614551-44
> Inselkammerstrasse 4         Fax: +49 (0)89 614551-10
> 82008 Unterhaching           Web: www.iteratec.de
>
> Sitz und Registergericht der iteratec GmbH: München HRB 113 519
> Geschäftsführer: Klaus Eberhardt, Mark Goerke, Inge Hanschke, Ralf Menzel
>
>
> ---------------------------------------------------------------------
> 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