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>