Wicket8 の AjaxButton onSubmit を使用して気がついたのだが、前の Wicket バージョンでは、onSubmit の中で任意に
error(Serializable) を呼ぶと、onError が走るという認識だったけど、Wicket 8 でそう動かない。Validator を
仕掛けておいて、バリデーションエラーの時に、onError が走る。
Validator の仕掛け以外で、onSubmit でエラーを判定してエラー処理をしたいことは多々あるわけで、
error(Serializable) で onError が走らないのは不便だ。
final TextField<String> nameField = new TextField<>("name", new Model<>()); queue(nameField); // フィードバック final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); final AtomicBoolean feedbackError = new AtomicBoolean(false); feedback.setFilter(e->feedbackError.get()); queue(feedback); queue(AjaxButton.onSubmit("send", (b, t)->{ feedbackError.set(false); try{ String name = Optional.ofNullable(nameField.getModelObject()) .orElseThrow(()->new RuntimeException("必須エラー")); // フィードバッククリア t.add(feedback); // 正常処理 }catch(Exception e){ error(e.getMessage()); feedbackError.set(true); t.add(feedback); } }));
こんな意見、指摘、
「 Validator エラー判定を全て用意するのが正しい、そうでなければそれは設計ミス!」
ということを言う人がいるかもしれない。
でも、それには私は反対だ。