私はWicketを使用するWebアプリケーションを持っています。私の問題は次のとおりです。 AjaxRequestTargetの内部で実行されるコードの一部が長時間費やされています。この操作中にビジーインジケータを表示する必要があります。要求を処理します。Wicket Call Javascript関数AjaxRequestTarget内
私はtarget.appendJavascript( "jsfunction()"を使用しようとしましたが、メソッドの実行後に起動されるため動作しません。この目標を達成するにはどうすればよいですか?
私のコード例では、マーティン-Gが提供する以下の
final ConfirmModal del_modal = new ConfirmModal("del-btn", "Are you sure?") {
@Override
public void onClickOK(AjaxRequestTarget target) {
target.appendJavaScript("loadingFormFromTarget();");
try {
Thread.sleep(10000);
} catch (InterruptedException ex) {
Logger.getLogger(ListPricePlanPage.class.getName()).log(Level.SEVERE, null, ex);
}}}
UPDATE
ソリューションはAjaxLinkで正常に動作しているが、私の問題はより複雑です。私は、ModalWindoを拡張ConfirmModalを持って、この実装で パブリック抽象クラスConfirmModalPanelはパネル{
public ConfirmModalPanel(String id, String text) {
super(id);
add(new Label("text", text));
AjaxLink ok = new AjaxLink("ok") {
@Override
public void onClick(AjaxRequestTarget target) {
onClikOK(target);
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
attributes.getAjaxCallListeners().add(new AjaxCallListener().onBeforeSend("start();").onComplete("finish();"));
}
};
add(ok);
add(new AjaxLink("ko") {
@Override
public void onClick(AjaxRequestTarget target
) {
onClikKO(target);
}
}
);
}
abstract public void onClikOK(AjaxRequestTarget target);
abstract public void onClikKO(AjaxRequestTarget target
);
}
を拡張機能は、「開始()」と「仕上げ()は、」正しく呼び出されますが、 onClickOKメソッド内で要求書込みを実行し続けると、ビジーインジケータを表示できません。
この解決策はAjaxLinkでは正常に動作しますが、私の場合は問題ありません。私は説明を更新しました。 –
インジケータを 'start()'に表示し、それを 'finish()'に隠す必要があります。考え方は、サーバー側に要求を行う前にそれを表示することです。あなたは 'setTimeout(...)'を使ってそれを少し遅らせて表示することができます。その場合は、 'finish()'でも 'clearTimeout()'を使わなければなりません。 –
私はあなたの助けを得て解決しましたが、私はこの方法でソリューションを修正します。私はAJaxCallListener:onSendBeforeを使用してupdateAjaxAttributesを介してsetTimeoutイベントを発生させ、onClickOkメソッド内でtarget.appendJavascript( "finish()")メソッドでイベントfinish()を発生させます。これは正常に動作します。 –