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

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

TimerEvent その2 AbstractAjaxTimerBehavior

前回のAjaxSelfUpdatingTimerBehaviorは、追加したコンポーネントを自動的に更新してくれたけど、今回のAbstractAjaxTimerBehaviorは自分で更新するコンポーネントを指定しなければいけない。また更新するコンポーネントはsetOutputMarkupId(true)をする必要がある。以下ソース、HTMLとアプリケーションクラスとフィルタマッピングは共通

package timer;

import java.util.Date;
import java.text.SimpleDateFormat;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
import org.apache.wicket.util.time.Duration;

public class TimerEventPage extends WebPage{
    public TimerEventPage(){
        IModel<String> timerModel = new AbstractReadOnlyModel<String>(){
            public String getObject(){
                Date date = new Date();
                SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
                return format.format(date);
            }
        };

        final Label label = new Label("timer", timerModel);
        label.setOutputMarkupId(true);
        
        add(new AbstractAjaxTimerBehavior(Duration.seconds(1)){
            public void onTimer(AjaxRequestTarget target){
                target.addComponent(label);
            }
        });
        
        add(label);
    }
}