This is a rewrite of the tabbed panel example from Wicket. We added examples of validation inside of tabs, navigation via deep links to tabs and disabling/hiding a tab via utility elements. Refresh the page a few times to get tab 3 enabled and/or tab 4 visible.

Tabs

This is tab-panel 1

This tab demonstrates that you cannot leave a tab when validation errors are on it, preventing the model state from getting inconsistent in complex navigation scenarios. Consider every tab having a save button, the user typing something invalid into tab 1, then going to tab 2 and hitting save. Now the database might perform an insert while missing a field, thus throwing a constraint violation exception. To prevent this, validation is done between tab switches. The stock TabbedPanel from Wicket does not do this, which is sad.