前回の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); } }