do it then a bit different

public class BigPage {
 public BigPage(BigObject object) {
  CompoundPropertyModel model = new CompoundPropertyModel(object)
   setModel(model)
   add(new SmallComponent("smallObject", model.bind("smallObject.name"));
   }
  }

public class SmallComponent {
    public SmallComponent(IModel model) {
    add(new Label("name", model);
    }
}

or

public class BigPage {
 public BigPage(BigObject object) {
  CompoundPropertyModel model = new CompoundPropertyModel(object)
   setModel(model)
   add(new SmallComponent("smallObject", model.bind("smallObject"));
   }
  }

public class SmallComponent {
    public SmallComponent(IModel model) {
    setModel(new CompoundPropertyModel(model));
    add(new Label("name");
    }
}



On Mon, Feb 16, 2009 at 20:59, Willis Blackburn <wbo...@panix.com> wrote:

> Johan,
>
> The below solution requires that SmallComponent know it's parent has
> CompoundPropertyModel and that there is a member called "smallObject."  I'm
> trying to keep SmallComponent generic, like the Wicket built-in components.
>
> W
>
>
>
> On Feb 16, 2009, at 2:46 PM, Johan Compagner wrote:
>
>  yes initmodel shouldnt call getModel() on the parent
>> because that was a big performance penalty on some solutions because that
>> would create and walk over the complete hierarchy of things
>> and then many many in between models are created, that dont do really
>> anything.
>>
>> But why not something like this:
>>
>> public class BigPage {
>>  public BigPage(BigObject object) {
>>  setModel(new CompoundPropertyModel(object));
>>  add(new SmallComponent("smallObject", getModel()));
>>  }
>> }
>>
>> public class SmallComponent {
>>  public SmallComponent(CompoundPropertyModel model) {
>>  add(new Label("name", model.bind("smallObject.name"));
>> }
>> }
>>
>> johan
>>
>>
>> On Mon, Feb 16, 2009 at 05:50, Igor Vaynberg <igor.vaynb...@gmail.com
>> >wrote:
>>
>>  hrm, looks like johan changed it here
>>>
>>> 526472  4/7/07 12:13 PM 3       jcompagner      component initModel will
>>> not call
>>> getModel on the parent, but will directly use the field (so that not
>>> all kinds of inbetween models are created) if model is an iwrapmodel
>>> and the wrapped modes is an inherited one then the model will be
>>> cleared on detach Compound.getTarget() removed. Compound will not
>>> unwrap in getObject() anymore AbstractPropertyModel will unwrap until
>>> all models are processed
>>>
>>> seems to me that the change breaks what i thought the contract of
>>> initmodel was... we should discuss on dev, mind sending a message?
>>>
>>> -igor
>>>
>>>
>>> On Sun, Feb 15, 2009 at 10:08 AM, Willis Blackburn <wbo...@panix.com>
>>> wrote:
>>>
>>>> Igor,
>>>>
>>>> Are you sure that will work?  I don't think that SmallComponent's
>>>>
>>> initModel
>>>
>>>> method is ever called, because when the Label that is part of
>>>>
>>> SmallComponent
>>>
>>>> is searching for a model (in Component.initModel), it invokes the
>>>> getModelImpl method of SmallComponent, which doesn't call initModel.
>>>>
>>> (The
>>>
>>>> comment in the code says "Don't call getModel() that could initialize
>>>>
>>> many
>>>
>>>> in-between useless models."
>>>>
>>>> W
>>>>
>>>> On Feb 15, 2009, at 12:23 PM, Igor Vaynberg wrote:
>>>>
>>>>  public class smallcomponent extends component {
>>>>> protected imodel initmodel() {
>>>>>   imodel model=super.initmodel();
>>>>>   return new compoundpropertymodel(model);
>>>>> }
>>>>> }
>>>>>
>>>>> -igor
>>>>>
>>>>> On Sun, Feb 15, 2009 at 8:19 AM, Willis Blackburn <wbo...@panix.com>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> I have a situation that keeps coming up.  All of my solutions have
>>>>>>
>>>>> seemed
>>>
>>>> clumsy, which makes me think that there's a better way of approaching
>>>>>> this
>>>>>> that I just haven't figured out.  Can someone point me in the right
>>>>>> direction?
>>>>>>
>>>>>> What I want is to have a Page that uses CompoundPropertyModel, and
>>>>>> then
>>>>>> include a component on that page that also uses CompoundPropertyModel.
>>>>>> So
>>>>>> roughly it looks like this:
>>>>>>
>>>>>> public class BigObject {
>>>>>> public SmallObject get SmallObject() { ... }
>>>>>> }
>>>>>>
>>>>>> public class SmallObject {
>>>>>> public String getName() { ... }
>>>>>> }
>>>>>>
>>>>>> public class BigPage {
>>>>>> public BigPage(BigObject object) {
>>>>>>    setModel(new CompoundPropertyModel(object));
>>>>>>    add(new SmallComponent("smallObject"));
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> public class SmallComponent {
>>>>>> public SmallComponent() {
>>>>>>    add(new Label("name"));
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> If I try to do just this, then I get an error because the label that's
>>>>>> part
>>>>>> of SmallComponent finds the BigPage model and fails because there's no
>>>>>> property of BigObject called name.
>>>>>>
>>>>>> So obviously SmallComponent needs some model:
>>>>>>
>>>>>> public class SmallComponent {
>>>>>> public SmallComponent(IModel model) {
>>>>>>    setModel(new CompoundPropertyModel(model));
>>>>>>    add(new Label("name"));
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> But what model to give it?  I tried passing it new
>>>>>> ComponentPropertyModel("smallObject"), which didn't work because
>>>>>> ComponentPropertyModel implements IComponentAssignedModel and thus
>>>>>>
>>>>> can't
>>>
>>>> be
>>>>>> directly wrapped in CompoundPropertyModel.  Adding a call to wrap() in
>>>>>> the
>>>>>> SmallComponent constructor fixed the problem, but I'm not sure if I
>>>>>> can
>>>>>> just
>>>>>> call wrap and carry on or if there will be some unforeseen consequence
>>>>>>
>>>>> of
>>>
>>>> that down the road.  Is there a standard way of doing this?
>>>>>>
>>>>>> Thanks,
>>>>>> Willis
>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>
>>>>>>
>>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>
>>>
>>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

Reply via email to