Wicket 6 より前は、IAjaxCallDecorator.decorateScipt によって返された JavaScript コードは、クリック直後に実行されていました。migration-guideに従って IAjaxCallDecorator を移行しました。5 秒以内にリンクを 3 回クリックすると、期待される結果は次のようになります。
- get前提条件
- get前提条件
- get前提条件
- getSuccessHandler
- getSuccessHandler
- getSuccessHandler
しかし、結果は次のとおりでした。
- get前提条件
- getSuccessHandler
- get前提条件
- getSuccessHandler
- get前提条件
- getSuccessHandler
ユースケース: Ajax リクエストが完了するまでブロックhttp://my.safaribooksonline.com/book/-/9781849511605/deeper-into-ajax/ch07lvl1sec04 (ページ 162)を参照
IAjaxCallDecorator を Wicket 6 に移行する別の方法はありますか?
public class HomePage extends WebPage {
public HomePage(final PageParameters parameters) {
add(new Label("version", getApplication().getFrameworkSettings().getVersion()));
AjaxLink<Void> blockingLink = new AjaxLink<Void>("blockingLink") {
@Override
public void onClick(AjaxRequestTarget target) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
IAjaxCallListener blockingListener = new AjaxCallListener() {
@Override
public CharSequence getPrecondition(Component component) {
return "console.log('getPrecondition');";
}
@Override
public CharSequence getSuccessHandler(Component component) {
return "console.log('getSuccessHandler');";
}
};
attributes.getAjaxCallListeners().add(blockingListener);
}
};
add(blockingLink);
}
}