読者です 読者をやめる 読者になる 読者になる

Wicket 8 FeedbackPanel サンプル

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 エラー判定を全て用意するのが正しい、そうでなければそれは設計ミス!」
ということを言う人がいるかもしれない。

でも、それには私は反対だ。