Re: Component initModel() order (design issue?)

2009-10-01 Thread Edmund Urbani
Can't be done, because the component does not yet know its parent during object
initialization. initModel/getDefaultModel needs to be called later, when the
component knows its place in the hierarchy. by giving the child component a
model that obtains the model from its parent (MyTextfield) the call to
getDefaultModel is delayed and it works.

Cheers
 Edmund

Igor Vaynberg wrote:
 why not
 
 class mytextefield extends panel {
   public mytextfield {
add(new textfield() { initmodel() { return
 mytextfield.this.getdefaultmodel(); }});
}
 }
 
 since this is essentially what you want to do - have textfield use the
 same model as the panel.
 
 -igor
 
 On Wed, Sep 30, 2009 at 9:47 AM, Edmund Urbani e...@liland.org wrote:
 You're right, getDefaultModel ensures initialization. I should have suggested
 that instead of getModel (which is not available in the component class 
 anymore
 in 1.4.x).

 However, I did not want to override the initModel() method (and copy most of 
 its
 code) just for that. So now I solved it by creating a new wrap model, which I
 pass to the child component and which wraps around the 
 parent.getDefaultModel().

 public class ComponentWrapModelT implements IWrapModelT {
private Component component;
public ComponentWrapModel(Component component) { // component = parent
this.component=component;
}

@Override
public IModel? getWrappedModel() {
return component.getDefaultModel();
}
 
 }

 Here's some more background which should explain why I chose to do this:
 I replace form components (eg. Textfield) with custom components (eg.
 MyTextfield) to add a few things my application needs to them. The name
 MyTextfield is a bit misleading here, because this is actually a subclass of
 Panel, and it merely contains a Textfield as a child. Still I wanted to use
 MyTextfield as a drop-in replacement, even when used in a form with a
 CompoundPropertyModel. This is where things got a little tricky, because the
 Textfield would end up trying to retrieve a property model matching its own
 wicket:id, when the relevant wicket:id had now become that of MyTextfield.

 Anyway I would have expected that wicket ensures the parent component model 
 gets
 initialized first, seeing how components generally query their parents when 
 they
 don't have a model of their own. And I'm still considering to report this as 
 a
 bug in Jira.

 Cheers
  Edmund


 Pedro Santos wrote:
 The child model's initModel() gets called first
 There are no especial ordering programing to initModels calls. Basically
 they are called by

 public final IModel? getDefaultModel()
 {
 IModel? model = getModelImpl();
 // If model is null
 if (model == null)
 {
 // give subclass a chance to lazy-init model
 model = initModel();
 setModelImpl(model);
 }

 return model;
 }
 What about your custom component gain an model that implements
 IComponentInheritedModel and assign his children default models with the
 desired logic? On IComponentInheritedModel you can access your custom
 component parent model, and if you use getDefaultModel method, you don't
 need to care with initialization ordering too...

 On Wed, Sep 30, 2009 at 9:51 AM, Edmund Urbani e...@liland.org wrote:

 Hi,

 I was just trying to create a component of my own which - in some of my
 pages -
 is created without a model. In the initModel() method I would then call
 super.initModel() and wrap the resulting model for use in a child
 component. The
 problem is the initialization order:

 The child model's initModel() gets called first, the parent (my custom
 component) does not yet have a model (getModelImpl() returns null) so it
 goes up
 farther in the component hierarchy and retrieves a wrong model.

 Looking at the Component source code (Wicket 1.4.1) I see a commented out
 line
 where initModel() used to to call the parent getModel() instead of
 getModelImpl(). There's also a comment explaining that doing so would
 initialize many inbetween completely useless models. Well, not so useless
 for
 what I am trying to do I guess.

 So, from my perspective this looks like a bug that causes necessary
 initialization to be bypassed. Obviously though it was done like that on
 purpose, so I decided to put the issue up here instead of filing a bug
 report.

 Has anyone else run into similar issues?
 Would it really be so bad to just call getModel()?

 Cheers
  Edmund


 -
 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
 


-- 
Liland ...does IT better

Liland IT 

Re: Component initModel() order (design issue?)

2009-10-01 Thread Igor Vaynberg
initmodel isnt called until the first getmodel/object call. why would
that happen before the component is added to its parent?

-igor

On Thu, Oct 1, 2009 at 1:03 AM, Edmund Urbani e...@liland.org wrote:
 Can't be done, because the component does not yet know its parent during 
 object
 initialization. initModel/getDefaultModel needs to be called later, when the
 component knows its place in the hierarchy. by giving the child component a
 model that obtains the model from its parent (MyTextfield) the call to
 getDefaultModel is delayed and it works.

 Cheers
  Edmund

 Igor Vaynberg wrote:
 why not

 class mytextefield extends panel {
   public mytextfield {
        add(new textfield() { initmodel() { return
 mytextfield.this.getdefaultmodel(); }});
    }
 }

 since this is essentially what you want to do - have textfield use the
 same model as the panel.

 -igor

 On Wed, Sep 30, 2009 at 9:47 AM, Edmund Urbani e...@liland.org wrote:
 You're right, getDefaultModel ensures initialization. I should have 
 suggested
 that instead of getModel (which is not available in the component class 
 anymore
 in 1.4.x).

 However, I did not want to override the initModel() method (and copy most 
 of its
 code) just for that. So now I solved it by creating a new wrap model, which 
 I
 pass to the child component and which wraps around the 
 parent.getDefaultModel().

 public class ComponentWrapModelT implements IWrapModelT {
        private Component component;
        public ComponentWrapModel(Component component) { // component = 
 parent
                this.component=component;
        }

       �...@override
        public IModel? getWrappedModel() {
                return component.getDefaultModel();
        }
 
 }

 Here's some more background which should explain why I chose to do this:
 I replace form components (eg. Textfield) with custom components (eg.
 MyTextfield) to add a few things my application needs to them. The name
 MyTextfield is a bit misleading here, because this is actually a subclass of
 Panel, and it merely contains a Textfield as a child. Still I wanted to use
 MyTextfield as a drop-in replacement, even when used in a form with a
 CompoundPropertyModel. This is where things got a little tricky, because the
 Textfield would end up trying to retrieve a property model matching its own
 wicket:id, when the relevant wicket:id had now become that of MyTextfield.

 Anyway I would have expected that wicket ensures the parent component model 
 gets
 initialized first, seeing how components generally query their parents when 
 they
 don't have a model of their own. And I'm still considering to report this 
 as a
 bug in Jira.

 Cheers
  Edmund


 Pedro Santos wrote:
 The child model's initModel() gets called first
 There are no especial ordering programing to initModels calls. Basically
 they are called by

     public final IModel? getDefaultModel()
     {
         IModel? model = getModelImpl();
         // If model is null
         if (model == null)
         {
             // give subclass a chance to lazy-init model
             model = initModel();
             setModelImpl(model);
         }

         return model;
     }
 What about your custom component gain an model that implements
 IComponentInheritedModel and assign his children default models with the
 desired logic? On IComponentInheritedModel you can access your custom
 component parent model, and if you use getDefaultModel method, you don't
 need to care with initialization ordering too...

 On Wed, Sep 30, 2009 at 9:51 AM, Edmund Urbani e...@liland.org wrote:

 Hi,

 I was just trying to create a component of my own which - in some of my
 pages -
 is created without a model. In the initModel() method I would then call
 super.initModel() and wrap the resulting model for use in a child
 component. The
 problem is the initialization order:

 The child model's initModel() gets called first, the parent (my custom
 component) does not yet have a model (getModelImpl() returns null) so it
 goes up
 farther in the component hierarchy and retrieves a wrong model.

 Looking at the Component source code (Wicket 1.4.1) I see a commented out
 line
 where initModel() used to to call the parent getModel() instead of
 getModelImpl(). There's also a comment explaining that doing so would
 initialize many inbetween completely useless models. Well, not so 
 useless
 for
 what I am trying to do I guess.

 So, from my perspective this looks like a bug that causes necessary
 initialization to be bypassed. Obviously though it was done like that on
 purpose, so I decided to put the issue up here instead of filing a bug
 report.

 Has anyone else run into similar issues?
 Would it really be so bad to just call getModel()?

 Cheers
  Edmund


 -
 To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
 For additional commands, e-mail: users-h...@wicket.apache.org



 

Component initModel() order (design issue?)

2009-09-30 Thread Edmund Urbani
Hi,

I was just trying to create a component of my own which - in some of my pages -
is created without a model. In the initModel() method I would then call
super.initModel() and wrap the resulting model for use in a child component. The
problem is the initialization order:

The child model's initModel() gets called first, the parent (my custom
component) does not yet have a model (getModelImpl() returns null) so it goes up
farther in the component hierarchy and retrieves a wrong model.

Looking at the Component source code (Wicket 1.4.1) I see a commented out line
where initModel() used to to call the parent getModel() instead of
getModelImpl(). There's also a comment explaining that doing so would
initialize many inbetween completely useless models. Well, not so useless for
what I am trying to do I guess.

So, from my perspective this looks like a bug that causes necessary
initialization to be bypassed. Obviously though it was done like that on
purpose, so I decided to put the issue up here instead of filing a bug report.

Has anyone else run into similar issues?
Would it really be so bad to just call getModel()?

Cheers
 Edmund

-- 
Liland ...does IT better

Liland IT GmbH
Software Architekt
email: edmund.urb...@liland.at

office: +43 (0)463 220111 | fax: +43 (0)463 220111 33 | mobil: +43 (0)699 
122011 16
http://www.Liland.at

-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: Component initModel() order (design issue?)

2009-09-30 Thread Pedro Santos
The child model's initModel() gets called first
There are no especial ordering programing to initModels calls. Basically
they are called by

public final IModel? getDefaultModel()
{
IModel? model = getModelImpl();
// If model is null
if (model == null)
{
// give subclass a chance to lazy-init model
model = initModel();
setModelImpl(model);
}

return model;
}
What about your custom component gain an model that implements
IComponentInheritedModel and assign his children default models with the
desired logic? On IComponentInheritedModel you can access your custom
component parent model, and if you use getDefaultModel method, you don't
need to care with initialization ordering too...

On Wed, Sep 30, 2009 at 9:51 AM, Edmund Urbani e...@liland.org wrote:

 Hi,

 I was just trying to create a component of my own which - in some of my
 pages -
 is created without a model. In the initModel() method I would then call
 super.initModel() and wrap the resulting model for use in a child
 component. The
 problem is the initialization order:

 The child model's initModel() gets called first, the parent (my custom
 component) does not yet have a model (getModelImpl() returns null) so it
 goes up
 farther in the component hierarchy and retrieves a wrong model.

 Looking at the Component source code (Wicket 1.4.1) I see a commented out
 line
 where initModel() used to to call the parent getModel() instead of
 getModelImpl(). There's also a comment explaining that doing so would
 initialize many inbetween completely useless models. Well, not so useless
 for
 what I am trying to do I guess.

 So, from my perspective this looks like a bug that causes necessary
 initialization to be bypassed. Obviously though it was done like that on
 purpose, so I decided to put the issue up here instead of filing a bug
 report.

 Has anyone else run into similar issues?
 Would it really be so bad to just call getModel()?

 Cheers
  Edmund

 --
 Liland ...does IT better

 Liland IT GmbH
 Software Architekt
 email: edmund.urb...@liland.at

 office: +43 (0)463 220111 | fax: +43 (0)463 220111 33 | mobil: +43 (0)699
 122011 16
 http://www.Liland.at

 -
 To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
 For additional commands, e-mail: users-h...@wicket.apache.org




-- 
Pedro Henrique Oliveira dos Santos


Re: Component initModel() order (design issue?)

2009-09-30 Thread Edmund Urbani
You're right, getDefaultModel ensures initialization. I should have suggested
that instead of getModel (which is not available in the component class anymore
in 1.4.x).

However, I did not want to override the initModel() method (and copy most of its
code) just for that. So now I solved it by creating a new wrap model, which I
pass to the child component and which wraps around the parent.getDefaultModel().

public class ComponentWrapModelT implements IWrapModelT {
private Component component;
public ComponentWrapModel(Component component) { // component = parent
this.component=component;
}

@Override
public IModel? getWrappedModel() {
return component.getDefaultModel();
}

}

Here's some more background which should explain why I chose to do this:
I replace form components (eg. Textfield) with custom components (eg.
MyTextfield) to add a few things my application needs to them. The name
MyTextfield is a bit misleading here, because this is actually a subclass of
Panel, and it merely contains a Textfield as a child. Still I wanted to use
MyTextfield as a drop-in replacement, even when used in a form with a
CompoundPropertyModel. This is where things got a little tricky, because the
Textfield would end up trying to retrieve a property model matching its own
wicket:id, when the relevant wicket:id had now become that of MyTextfield.

Anyway I would have expected that wicket ensures the parent component model gets
initialized first, seeing how components generally query their parents when they
don't have a model of their own. And I'm still considering to report this as a
bug in Jira.

Cheers
 Edmund


Pedro Santos wrote:
 The child model's initModel() gets called first
 There are no especial ordering programing to initModels calls. Basically
 they are called by
 
 public final IModel? getDefaultModel()
 {
 IModel? model = getModelImpl();
 // If model is null
 if (model == null)
 {
 // give subclass a chance to lazy-init model
 model = initModel();
 setModelImpl(model);
 }
 
 return model;
 }
 What about your custom component gain an model that implements
 IComponentInheritedModel and assign his children default models with the
 desired logic? On IComponentInheritedModel you can access your custom
 component parent model, and if you use getDefaultModel method, you don't
 need to care with initialization ordering too...
 
 On Wed, Sep 30, 2009 at 9:51 AM, Edmund Urbani e...@liland.org wrote:
 
 Hi,

 I was just trying to create a component of my own which - in some of my
 pages -
 is created without a model. In the initModel() method I would then call
 super.initModel() and wrap the resulting model for use in a child
 component. The
 problem is the initialization order:

 The child model's initModel() gets called first, the parent (my custom
 component) does not yet have a model (getModelImpl() returns null) so it
 goes up
 farther in the component hierarchy and retrieves a wrong model.

 Looking at the Component source code (Wicket 1.4.1) I see a commented out
 line
 where initModel() used to to call the parent getModel() instead of
 getModelImpl(). There's also a comment explaining that doing so would
 initialize many inbetween completely useless models. Well, not so useless
 for
 what I am trying to do I guess.

 So, from my perspective this looks like a bug that causes necessary
 initialization to be bypassed. Obviously though it was done like that on
 purpose, so I decided to put the issue up here instead of filing a bug
 report.

 Has anyone else run into similar issues?
 Would it really be so bad to just call getModel()?

 Cheers
  Edmund



-
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org



Re: Component initModel() order (design issue?)

2009-09-30 Thread Igor Vaynberg
why not

class mytextefield extends panel {
  public mytextfield {
   add(new textfield() { initmodel() { return
mytextfield.this.getdefaultmodel(); }});
   }
}

since this is essentially what you want to do - have textfield use the
same model as the panel.

-igor

On Wed, Sep 30, 2009 at 9:47 AM, Edmund Urbani e...@liland.org wrote:
 You're right, getDefaultModel ensures initialization. I should have suggested
 that instead of getModel (which is not available in the component class 
 anymore
 in 1.4.x).

 However, I did not want to override the initModel() method (and copy most of 
 its
 code) just for that. So now I solved it by creating a new wrap model, which I
 pass to the child component and which wraps around the 
 parent.getDefaultModel().

 public class ComponentWrapModelT implements IWrapModelT {
        private Component component;
        public ComponentWrapModel(Component component) { // component = parent
                this.component=component;
        }

       �...@override
        public IModel? getWrappedModel() {
                return component.getDefaultModel();
        }
 
 }

 Here's some more background which should explain why I chose to do this:
 I replace form components (eg. Textfield) with custom components (eg.
 MyTextfield) to add a few things my application needs to them. The name
 MyTextfield is a bit misleading here, because this is actually a subclass of
 Panel, and it merely contains a Textfield as a child. Still I wanted to use
 MyTextfield as a drop-in replacement, even when used in a form with a
 CompoundPropertyModel. This is where things got a little tricky, because the
 Textfield would end up trying to retrieve a property model matching its own
 wicket:id, when the relevant wicket:id had now become that of MyTextfield.

 Anyway I would have expected that wicket ensures the parent component model 
 gets
 initialized first, seeing how components generally query their parents when 
 they
 don't have a model of their own. And I'm still considering to report this as a
 bug in Jira.

 Cheers
  Edmund


 Pedro Santos wrote:
 The child model's initModel() gets called first
 There are no especial ordering programing to initModels calls. Basically
 they are called by

     public final IModel? getDefaultModel()
     {
         IModel? model = getModelImpl();
         // If model is null
         if (model == null)
         {
             // give subclass a chance to lazy-init model
             model = initModel();
             setModelImpl(model);
         }

         return model;
     }
 What about your custom component gain an model that implements
 IComponentInheritedModel and assign his children default models with the
 desired logic? On IComponentInheritedModel you can access your custom
 component parent model, and if you use getDefaultModel method, you don't
 need to care with initialization ordering too...

 On Wed, Sep 30, 2009 at 9:51 AM, Edmund Urbani e...@liland.org wrote:

 Hi,

 I was just trying to create a component of my own which - in some of my
 pages -
 is created without a model. In the initModel() method I would then call
 super.initModel() and wrap the resulting model for use in a child
 component. The
 problem is the initialization order:

 The child model's initModel() gets called first, the parent (my custom
 component) does not yet have a model (getModelImpl() returns null) so it
 goes up
 farther in the component hierarchy and retrieves a wrong model.

 Looking at the Component source code (Wicket 1.4.1) I see a commented out
 line
 where initModel() used to to call the parent getModel() instead of
 getModelImpl(). There's also a comment explaining that doing so would
 initialize many inbetween completely useless models. Well, not so useless
 for
 what I am trying to do I guess.

 So, from my perspective this looks like a bug that causes necessary
 initialization to be bypassed. Obviously though it was done like that on
 purpose, so I decided to put the issue up here instead of filing a bug
 report.

 Has anyone else run into similar issues?
 Would it really be so bad to just call getModel()?

 Cheers
  Edmund



 -
 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