Thanks Timo,
It didn't occur to me to override isVisible, I assumed I had to call
setVisible(). I still have it ingrained into my head that subclassing
is something that should be avoided. So obviously I run into these
issues when using Wicket, where subclassing existing components is
essential.
-Sam
On Feb 25, 2008, at 7:35 PM, Timo Rantalaiho wrote:
On Mon, 25 Feb 2008, Sam Barnum wrote:
It seems like writing a custom behavior is the right way to do this,
but once I call setVisible(false) on a component the beforeRender()
method in my behavior doesn't get called anymore, and the component
never becomes visible.
...
DropDownChoice report = new DropDownChoice("report" ; new
PropertyModel(this, "selectedReport"), reportOptions );
WebMarkdupContainer f1 = new WebMarkupContainer("f1");
f1.add(new AbstractBehavior() {
public void onComponentTag(Component component, ComponentTag tag) {
// only show the component if it's enabled for the selected
report
component.setVisible(selectedReport != null &&
selectedReport.isField1Enabled());
super.onComponentTag(component, tag);
}
} );
class ReportDependentWebMarkupContainer extends
WebMarkupContainer {
public ReportDependentWebMarkupContainer(String id) {
super(id);
}
@Override public boolean isVisible() {
if (selectedReport == null) {
return false;
}
return selectedReport.isField1Enabled());
}
}
WebMarkupContainer f1 = new ReportDependentWebMarkupContainer
("f1");
If you don't want to override isVisible(), you can do
setting the visiblity in Component.onBeforeRender().
I'm not sure if you can control visibility in a Behavior,
but have a vague memory that we tried it sometime and
couldn't do it either.
Should I always keep the component visible and have my behavior
replace all the contents after rendering?
No.
Best wishes,
Timo
--
Timo Rantalaiho
Reaktor Innovations Oy <URL: http://www.ri.fi/ >
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]