I use wizard api from wicket extensions.
Next button is implemented like org.apache.wicket.extensions.wizard.NextButton.
It means: if step is complete wizardModel.next() is called and step content is replaced.
I send you example - see attachment.
In the example Step2Panel contains inner form "innerForm".
The problem is when we leave step 1 (click to next button) - innerForm.onSubmit from step 2 is called.
Obversely when we leave step 2 innerForm.onSubmit is not called!
One solution is to call form.process(null) manually in Nextbutton.onClick before step content is replaced. It is wrong again becaouse innerForm.onSubmit is called twice.