DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
- Add all components that may render, and then toggle their visibility.
- This will tell wicket not to render the portion of html associated with that component.
- Basic steps to implement:
- add all possible components to your page
- override isVisible on them or call setVisible()
Example:
...
Extended version:
...
...
Clarification on defining component visibility
...
If the component itself controls its own visibility the best way is to override
onConfigure()and callsetVisible()inside.If an outside component controls another’s visibility the best way is to override the controlling component’s
onConfigure()and callcontrolled.setVisible()If you have a simple state toggle, like “when i click this link i want this component’s visibility to change” then calling
component.setVisible()is fine.If you have a cross-cutting concern (authorization strategy, configure listener, before render listener, etc) overriding component’s visibility then call
component.setVisibilityAllowed(). Wicket ands this bit with the visible bit to determine final visibility; this way the cross-cutting concern won’t dirty component’s visibility attribute.title If all of these fail... Note If all of these fail, as a last resort override component.isVisible() but be warned that this has a few pitfalls:
- it is called multiple times per request, potentially tens of times, so keep the implementation computationally light
- this value should remain stable across the render/respond boundary. Meaning if isVisible() returns true when rendering a button, but when the button is clicked returns false you will get an error
The Panel Method
- Create two panels that display either state that you will possibly want shown, and swap them as needed.
...