アンドリューは非常に親切に私の元の質問を提出しました。私は(あなたが示唆したように、かなり多くの)これをやってみました:
class MyWizard extends Wizard {
private Integer finishPressed = -1; // deliberately set an invalid value to start with
public MyWizard() {
finishPressed = 0; // only place where finishedPressed is set to 0
log.info("init: finishPressed={}", finishPressed);
}
@Override
public void onFinish() {
log.info("begin: finishPressed={}", finishPressed);
if (! finishPressed) {
finishPressed += 1;
// do onFinish actions ...
}
log.info("end: finishPressed={}", finishPressed);
}
}
しかし、私が見つけることは、私は[完了]ボタンを押すとonFinish()は何回も呼ばれているということであるが、各時間がfinishPressedがとき0でありますカウントの増分ではなく、というメソッドに入ります。
注:ログに「init:finishPressed = 0」と表示されるのは、です。どのように0にリセットされ続けるか分かりません。しかし、私はonFinish()呼び出しが毎回別のスレッドによって処理されたことに気付きました。しかし、コンストラクタ(finishPressedが0に設定されている唯一の場所)は一度しか呼び出されませんでした。
finishPressedを静的として宣言するだけで(実際のライブ操作では明らかに問題が発生します)、finishPressedのインクリメントが期待通りに行われていることがわかります。
ありがとうございました。標準のWicket Wizardコンポーネントを使用するだけです。あなたがAjax対応のウィザードを提供することができればそれは素晴らしいだろう;) –
それは既にある:newButtonBar()をオーバーライドし、 'AjaxWizardButtonBar'を返すようにする。 – svenmeier