Wicket1.5のValidatorの上位クラスがBehaviorになっているのだけど真意がわかんない
はじめに
Wicket1.5で行われた変更について、私には真意が分からないものがいくつかあります。
その一つが、Validatorの上位クラスがBehaviorになっていることです。
環境
- Wicket 1.5.3
Validatorの上位クラスがBehaviorになっている?
以下のページを読みますと、「All standard validators now extend Behavior to allow for client side validations」という変更が存在しています。
日本語にすると「すべての標準のバリデータは、クライアント側バリデーションを可能にするために、Behaviorを継承する」といった感じでしょうか。
でも、です。
別にValidatorを見てもクライアント側バリデーションをサポートするコードが埋まっているようには見えないのです。
クライアント側バリデーションをするコードは、自分で書けと言うことなのでしょうか。
ちなみ自分で書くのだと想定して書いてみると、以下のような感じ。
実際は、Validatorは匿名クラスにせずに使い回すのだと思います。
public class HomePage extends WebPage { private static final long serialVersionUID = 1L; public HomePage(final PageParameters parameters) { Model<String> model = new Model<String>(); Form<Void> form = new Form<Void>("form"); final TextField<String> textField = new TextField<String>("text", model); textField.setOutputMarkupId(true); textField.add(new RangeValidator<Integer>(1,3){ private static final long serialVersionUID = 1L; @Override public void onComponentTag(final Component component, final ComponentTag tag) { StringBuilder sb = new StringBuilder(); String textFieldID = textField.getMarkupId(); sb.append("var value = document.getElementById('" + textFieldID + "').value;"); sb.append("if(isNaN(value) || value <" + this.getMinimum().toString()+ "|| value> " + this.getMaximum() + "){alert('error');}"); tag.getAttributes().put("onblur", sb.toString()); } }); form.add(textField); add(form); } }
さいごに
開発者のblogを見たら載っているのではないかという気もするのですが、Wicket開発者の役割分担とか、そもそもコアな開発者は誰なのかとかが分かっていないので、現実的な時間で調べるのが辛いという…。