フォームからの入力値の検証

2018年2月25日

この記事は最初の投稿日から18年経過しています。内容が古い可能性があります。

前回、ListViewや、PageableListView を使うために ToDo 一覧っぽいものを出力するようにしたのですが、行き詰まってしまったので、値を入力して次のページでその値を表示する処理に巻き戻すことにします。

とりあえず、入力値の検証を何も行っていなかったため、検証を加えてみます。

HelloWorld.java


package helloworld;
import wicket.markup.html.WebPage;
import wicket.markup.html.form.Form;
import wicket.markup.html.form.RequiredTextField;
import wicket.markup.html.form.validation.StringValidator;
import wicket.markup.html.panel.FeedbackPanel;
import wicket.model.PropertyModel;
import wicket.util.value.ValueMap;
public class HelloWorld extends WebPage {
public HelloWorld() {
add(new FeedbackPanel("feedback"));
add(new HelloForm("form"));
}
public final class HelloForm extends Form {
ValueMap properties = new ValueMap();
public HelloForm(final String id) {
super(id);
RequiredTextField lastnameTextField = new RequiredTextField ("lastname", new PropertyModel(properties, "lastname"));
lastnameTextField.add(StringValidator.lengthBetween(1,4));
add(lastnameTextField);
RequiredTextField firstnameTextField = new RequiredTextField("firstname", new PropertyModel(properties, "firstname"));
firstnameTextField.add(StringValidator.lengthBetween(1,4));
add(firstnameTextField);
}
public final void onSubmit() {
setResponsePage(new NextPage(properties));
}
}
}

RequiredTextField は、「必須入力」を表します。TextField に setRequired(true) したものと同等になるそうです。


lastnameTextField.add(StringValidator.lengthBetween(1,4));

は、TextField に、1文字以上4文字以下の制限を加える物です。

必須チェックをかけた上に1文字以上のチェックを加えるのは意味がないような気もしますが・・・

StringValidator には他に、 maximumLength、minimumLength などがあります。

さらに、エラーメッセージを表示するために、


add(new FeedbackPanel("feedback"));

として、FeedbackPanel を追加しています。

HelloWorld.html

FeedbackPanel が出力する場所として、


<span wicket:id="feedback"/>

を適当なところに挿入してやります。

これで実行すると、


'長い長い長い文字列' は 1 文字から 4 文字までにしてください.

と表示されるので、lengthBetweek() の検証が効いていることがわかります。

ですが、未入力チェックの方のメッセージが文字化けしてしまいます。

というよりも、そもそも、このメッセージ文字列はどこからやってきたのでしょうか?

wicket の jar ファイルを見てみると、どうやら wicket/Application_ja.properties から来ているようです。

中身をのぞいてみると、native2ascii による変換結果で入っています。

native2ascii -reverse してみると、必須入力チェック時には、


RequiredValidator='${label}' 欄 は必須です。

というメッセージが出そうです。

が、出てくれません。

う~ん。何故化けるのでしょうか・・・。

今回はここで挫折。

Dev,Wicket

Posted by toshyon