1

私はこの状況を持っています:

私は持っていIndicatingAjaxButtonます。onSubmitメソッドでは、いくつかの操作が完了し、次にsetResponsePage(otherPage);が呼び出されます

操作がまだ進行中の間、ビジー インジケータが表示されます。ただし、操作が完了すると、ユーザーがまだ同じページにいて、他のアクティビティを実行できる間、ブラウザーが他のページを開くのに忙しい間、インジケーターは消えます。

私の質問は、ブラウザがビジー状態でotherPage.

ありがとうございました

4

1 に答える 1

1

まず第一に、あなたはあなたが本当にajaxリクエストでこれをする必要があることを確認する必要があるでしょう。setResponsePage()特定の条件にのみ依存して実行している場合、またはAjaxy操作を実行している場合を除いて、必要とは思われません。

Ajaxが必要ない場合は、Ajaxを削除して、通常のリクエストを送信することをお勧めします。ビジーインジケータークライアントまたはWicket側をコーディングし、JavaScriptで表示させることができます(おそらくbody.onunload一般的な方法ですか?)。

ただし、これを本当に達成したい場合は、インジケーターが非表示になっている理由を理解する必要があります。Wicketは、呼び出しの完了(成功または失敗)時に実行されるJavaScriptを準備します。関連する方法はAbstractDefaultAjaxBehavior#generateCallbackScript()次のとおりです。

final CharSequence onSuccessScript = getSuccessScript();
final CharSequence onFailureScript = getFailureScript();
...
if (!Strings.isEmpty(indicatorId))
    {
    String hide = ";wicketHide('" + indicatorId + "');";
    success = success + hide;
    failure = failure + hide;
}

ここでWicketはwicketHide(id)、リクエストが完了すると(成功または失敗したときに)インジケーターを効果的に非表示にするjavascript呼び出しを準備しています。

私はこれを試みたことがありませんが、おそらくオーバーライドgetFailureScript()して、実行する前getSuccessScript()にスクリプトを作成するために、Ajaxの動作でトリックを実行する必要があります。returnwicketHide(id)

protected CharSequence getSuccessScript() {
    String script = super.getSucessScript();
    return (script != null ? script : "") + ";return false;";
}
protected CharSequence getFailureScript() {
    String script = super.getFailureScript();
    return (script != null ? script : "") + ";return false;";
}

これにより、インジケーターが常に表示されたままになり、非表示にならないことに注意してください。条件付きで非表示にするか、aが実行されるかどうかに応じて非表示にする場合setResponsePageは、たとえば、を使用してjs変数を定義しAjaxRequestTarget、および実装でreturn条件付きで定義できます。getSucessScript()getFailureScript()

Wicketの情報源は(少なくとも私にとっては)驚くほど読みやすく、理解しやすいものです。彼らはそれが実際にどのように機能するか、そしてあなたがあなたのニーズに合うようにそれをどのように微調整することができるかを理解するのにあなたを大いに助けることができます。

于 2013-03-07T16:45:10.933 に答える