AJAX でのバリデーション

Wicket AJAX でのバリデーション

AjaxButton で form 入力バリデーションエラーをフィードバック表示
(FeedbackPanel の使用)は、通常のFeedbackPanelの追加、
  add(new FeedbackPanel("feedback");
の方法では、バリデーションエラーを表示できない。
この場合、次のメッセージが出るがどうすればよいのかわかりにくい。
Component-targetted feedback message was left unrendered.
This could be because you are missing a FeedbackPanel on the page.


エラー(バリデーションエラーで走るエラー処理)処理、onError
オーバーライドして、AjaxRequestTarget に、FeedbackPanel コンポーネント
add することである。ここで工夫が必要で、ちょっと小賢しい方法で
FeedbackPanel を渡す必要がある。

public class SamplePage extends WebPage{
   private FeedbackPanel feedback;
   public SamplePage(){
      this.feedback = new FeedbackPanel("feedback");
      this.feedback.setOutputMarkupId(true);

      add(this.feedback);
      Form<Void> form = new Form<Void>("form");
      final TextField<Integer> minute = new RequiredTextField<Integer>("minute",new Model<Integer>());
      minute.setType(Integer.class);
      minute.add(new RangeValidator<Integer>(0,59));
      form.add(minute);
      form.add(new AjaxButton("submit"){
         @Override
         protected void onSubmit(AjaxRequestTarget target,Form<?> f){
            // submit ボタン実行
            setResponsePage(f.getPage());//←再表示させることで
         //前回,inValid メッセージを消す(このサンプルでは。

         }
         @Override
         protected void onError(final AjaxRequestTarget target, final Form ff) {
            target.addComponent(ff.getPage().get("feedback"));
         }

      });
      add(form);
   }
}

onSubmit の中で
setResponsePage(f.getPage());
を実行すると、エラーメッセージ後、正常入力でフィードバックメッセージ
が再表示により消える。これを忘れないようにする!!

=============== HTML =====================
<html xmlns:wicket="">http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sample Page</title>
<link rel="stylesheet" type="text/css" href="css/jacob.css">
</head>
<body>
<div wicket:id="feedback" id="feedback" class="feedback"></div>

<form wicket:id="form">

<input wicket:id="minute" type="text" maxlength="2" size="2"/>分

<button wicket:id="submit">登録</button>

</form>
</body>
</html>