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

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

最初にフォーカスが移ったときに表示されている文字列を消すテキストフィールド

最初にフォーカスが移ったときに表示されている文字列を消すテキストフィールドを作ってみた。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" />      
    </form>
  </body>
</html>

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

package textfield;

import org.apache.wicket.markup.html.WebPage;
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 TextFieldTest extends WebPage{
    boolean isFirst = true;
    
    public TextFieldTest(){
        Form form = new Form("form");
        final TextField<String> field = new TextField<String>("field", new Model("名前を入力してください"));
        field.setOutputMarkupId(true);
        
        field.add(new AjaxFormComponentUpdatingBehavior("onfocus"){
            @Override
            protected void onUpdate(AjaxRequestTarget target){
                if(isFirst){
                    field.setModelObject("");
                    target.addComponent(field);
                    isFirst = false;
                }
            }
        });
        
        form.add(field);
        add(form);
    }
}

アプリケーションクラスとweb.xmlは省略。TextFieldを継承した物を作ろうとしたけどクラス名が思い浮かばなかったから諦めた