On Wed, Nov 07, 2007 at 11:31:12AM +0100, Mats Norén wrote:
> 
> Is the above statement really true considering that by adding abstract
> methods to your page you defer the creation of the markup in just the
> same way as the new proposed solution?
> 
> BasePage.java
> 
> public BasePage() {
>     addAbstract1("abstractId1");
>     addAbstract2("abstractId2);
> }
> 
> public abstract addAbstract1(String abstractId1);
> public abstract addAbstract2(String abstractId2);
> 
> 
> BasePage.html
> 
> <span wicket:id="abstractId1"/>
> <span wicket:id="abstractId2"/>
> 
> What is the difference between that and doing abstract / implements?

You've just illustrated one of the major problems with the
panel-from-a-subclass approach: it's easy to get it wrong. In your
example, addAbstract1 and addAbstract2 will be called in a class whose
constructor has not yet been called. Consider:

public DerivedPage extends BasePage {

    private String name;

    public DerivedPage(String name) {
        super();
        this.name = name;
    }

    public abstract addAbstract1(String abstractId1) {
        add(new NamePanel(abstractId1, name));
    }
}

This code is broken, since you're constructing NamePanel before name has
been initialized. Someone later in this thread shows a better way to do
this, by calling the overridable methods from onBeforeRender. But this
is also tricky; because onBeforeRender can be called multiple times you
must maintain a flag to ensure you only add your panels once.

Given these subtle problems with this approach, I admit I'm warming to
the multiple extend/child idea.

jk

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to