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]