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 <[email protected]>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 <[email protected]>
> 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 <[email protected]>
> >> 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: [email protected]
> >>> For additional commands, e-mail: [email protected]
> >>>
> >>>
> >>
> >> ---------------------------------------------------------------------
> >> 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]
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>