マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

フォーカスを失ったときに内容をチェックするテキストフィールド

フォーカスを失ったときに内容をチェックするテキストフィールドを作ってみた。以下のプログラムではテキストフィールドがフォーカスを失ったときの内容がhttp://で始まっていなければエラーメッセージを表示するもの。http://で始まってるならエラーメッセージを消去する。Wicketのバージョンは1.4-m3
まずはHTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <form wicket:id="form">
      <input type="text" wicket:id="field" />
      <span wicket:id="label" style="color:red">エラーメッセージ</span>
    </form>
  </body>
</html>

上のHTMLに対応したJavaのソース

package textfield;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.Model;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;

public class TextFieldTest2 extends WebPage{
    public TextFieldTest2(){
        Form form = new Form("form");
        final TextField<String> field = new TextField<String>("field", new Model<String>(""));
        final Label label = new Label("label", new Model<String>());
        label.setOutputMarkupId(true);
        
        field.add(new AjaxFormComponentUpdatingBehavior("onblur"){
            @Override
            protected void onUpdate(AjaxRequestTarget target){
                if(field.getModelObject() == null || !field.getModelObject().startsWith("http://")){
                    label.setDefaultModelObject("http://ではじめてください");
                }else{
                    label.setDefaultModelObject("");
                }
                
                target.addComponent(label);
            }
        });
        
        form.add(field);
        form.add(label);
        add(form);
    }
}

アプリケーションクラスとweb.xmlは省略。