On Sat, Apr 26, 2008 at 04:46:11AM -0700, John Patterson wrote:
>
>
>
> John Krasnay wrote:
> >
> > This rule is too strict. Another way to avoid calling overridable
> > methods from the constructor is to use a model:
> >
>
> Models are fine for providing dynamic values but do not help you customise
> components by extension. For example, to provide a different type of link
> to use in the component (as PagingNavigation allows)
Sure, but your rule said "Call all overridable methods from
onBeforeRender()", and I gave you a working counterexample that has
nothing to do with onBeforeRender.
The rule should really be "Avoid calling overridable methods from the
constructor." onBeforeRender is a good strategy to use when you need
information from your subclass to *construct* a sub-component (e.g.
"...to provide a different type of link..."), but it's really overkill
if you simply need a value that comes from the subclass, e.g. as a label
value.
Since you've volunteered to write up a wiki page :-) here's another
pattern I use quite a bit: providing overridable methods in the panel to
turn on and off elements within the panel:
BAD:
public class MyPanel extends Panel {
public MyPanel(String id) {
super(id);
add(new Label("name", ...).setVisible(isNameVisible()));
}
public boolean isNameVislble() {
return true;
}
}
GOOD:
public class MyPanel extends Panel {
public MyPanel(String id) {
super(id);
add(new Label("name", ...) {
public boolean isVisible() {
return isNameVisible();
}
}
}
public boolean isNameVislble() {
return true;
}
}
jk
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]