Gerolf Seitz wrote:
> you can provide factory methods in your base page like
> protected abstract Component newHeader(String id, IModel model);
>
> in the constructor of base page do:
> add(newHeader("header", someModelOrNull));
>
> and just override/implement the factory method in your concrete page
> classes.
>
> hth,
>   Gerolf


I'll be so happy when multiple child is implemented, because I really think this is an anti-pattern.

Basically, in the constructor of the base page you call an overridable method, which is terrible. For example you have in your subclass:

public class MySubClass extends MyBaseClass {

        // my fields
        public int answer = 42;

        public MySubClass(int suppliedAnswer) {
                // implicit (or explicity call to super)
                super();

                // init class state and establish class invariants
                // this stuff could be really complicated!
                if (suppliedAnswer != -1) {
                        answer = suppliedAnswer;
                }
        }

        @Override
        public Component getUniverseComponent(String id) {
                // create universe component using state of this class
                // the structure of this component could depend on this
                // the component could even depend on constructor
                // args that the base class knows nothing about (as
                // is the case now).
                if (answer == 42) {
                        return new HHGTGPanel(id);
                }
                return new Label(id, String.valueOf(answer));
        }

}

The problem is that getUniverseComponent gets called from the base class before the constructor of the subclass gets evaluated. :-( This means that the = 42 assignment has not been done yet, nor the override of the value with the value from the constructor arg. The (partial) workaround I've used (a special private init method and initialized flag) is just plain ugly (and partial, since you still can't use your constructor args).

Regards,
Sebastiaan



On Thu, Mar 20, 2008 at 9:25 AM, Cristi Manole <[EMAIL PROTECTED]>
wrote:

Hello,

I've searched the web and I see there are a lot of hits for what I'm
looking
for but I cannot quite pinpoint the perfect solution (easiest) for this
simple thing.

What I need is to be able to "extend" a base page and put into some places
some extra panels. I designed the places in the base page.

For only one panel, I can use <wicket:child> tag. If I need more than one
panel inserted, how do I do that?

Thanks,
Cristi Manole


Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to