the "workaround" is quiet easy
class mypage extends webpage {
onbeforerender() {
if (get("panel1")==null) {
add(newPanel1("panel1"));
}
super.onbeforerender();
}
}
-igor
On Thu, Mar 20, 2008 at 2:12 AM, Sebastiaan van Erk <[EMAIL PROTECTED]> wrote:
> 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
> >>
> >
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]