例えばAjaxButton
に対して、ユーザがボタンを押したときにconfirm
で確認ダイアログを出したときだけサブミットを実行したい、というときは、次のようにすれば実現出来ます。
ポイントはupdateAjaxAttributes
メソッドのオーバーライドです。
SomePage.java
final IndicatingAjaxButton button = new IndicatingAjaxButton("deleter") {
@Override
protected void updateAjaxAttributes(final AjaxRequestAttributes pAttributes) {
super.updateAjaxAttributes(pAttributes);
final AjaxCallListener ajaxCallListener = new AjaxCallListener();
ajaxCallListener.onPrecondition("return confirm('この操作は取り消せません!本当に削除してよろしいですか?');");
pAttributes.getAjaxCallListeners().add(ajaxCallListener);
}
@Override
protected void onSubmit(final AjaxRequestTarget pTarget, final Form<?> pForm) {
// サブミットしたときの処理
...
}
};
確認ダイアログを出すくらいの単純な処理なら、上記のように直接JavaScriptの実行コードを書いてもいいですが、もっと複雑な処理を実行する必要がある場合、別途JavaScriptの関数を作っておいて、そちらを呼び出すJavaScriptコードを書けばよいでしょう。