You shouldn't care about passing model from parent to child-children. If I understood right your situation you should have a panel (parent of DateDropDownChoice) where you have set a CompoundPropertyModel binded to an object containing a calendar (i.e. setDefaultModel(new CompoundPropertyModel(<object to render>))). Now let's say that calendar field's name is 'calendar' and in turn it has an integer field called 'day'.

If you add a TextField with id "calendar.day" (i.e add(new TextField("calendar.day"))) in your DateDropDownChoice you should display 'day' field value.

Does your code work in this way?


I use the following constructor code:

    public DateDropDownChoice(final String id) {
        this(id, null);
    }

    public DateDropDownChoice(final String id, IModel<Calendar> model)
    {
        super(id);

        //.. set default values to children if model is null
    }

But how should be able to resolve the model from the parent during the constructor call? The child-parent relationship gets established by calling add(new DateDropDownChoice("prop-name")) which gets executed _after_ the constructor, right? So at that moment my component does not even know it has a parent.

Of course I could just pass in a reference to the parent and use that one, but this would mean my component would have a different interface than e.g. TextField and therefore just does not seem right to me.

To my understanding the place to set my model would be initModel() which gets called when a call to getModel() returns null. After doing some more debugging it seems that many components, like e.g. CheckBox, use onBeforeRender to retrieve their model implicitly by calling getValue().

So I am thinking about moving the initialising code for my components children from the constructor to this method and have initModel() get the ModelValue from the parent. But is this the recommended way? Is there one?


On Sat, 28 May 2011, James Carman wrote:

Please list your constructors of your custom component.  I believe the
auto-resolving of models from a parent CPM is done during the
constructor (the one with just the component id).

On Sat, May 28, 2011 at 8:27 AM, andrea del bene
<andrea.on....@libero.it> wrote:
Hi,
Have you called setType(Calendar.class) in your custom form component? Does
its model remain 'null'?

Hi all,

I am pretty new to Wicket (using 1.4.10) and have some hard time to figure out how the interaction between components and models exactly works. So I was hopeing that someone here could enlighten me or tell me where I should
look (WARNING: Rather lengthy post).

My particular problem is that I have a custom component that extends
FormComponent<Calendar> to display a date in a certain way. This component
is part of a Panel in which I use a CompoundPropertyModel to render an
object containing a calendar among other things (the object is fully
populated and load from the database by using a LoadableDetachableModel
chained to the CompoundPropertyModel).

For the other object fields I simply use TextFields which get populated properly and when I use a TextField<calendar> instead of my custom component the field contains the result of Calendar.toString so I guess the Panel it's
children and the corresponding are set up correctly.

But whenever I use my custom component I don't get a reference to that
Calendar instance. I did try to get some insights by looking into the code of the TextField class and overriding various methods from super classes but
I just did not get it.

To my understanding something like setModel or setModelObject on my
component should be called so I can override this method and do my custom stuff in it. But somehow this does not happen. During debugging I saw that the Panel is set as my components parent and everything seeme to be stuck together correctly. But somehow I can't get the Calendar instance from my
object to get set as my components model value.

So I figure that I am missing some vital point on this topic and would be very grateful for any advice, like an how to for extending Components or
something similar.

Thanks for reading this far,
Chris

---------------------------------------------------------------------
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