まず第一に、あなたはあなたが本当に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の動作でトリックを実行する必要があります。return
wicketHide(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の情報源は(少なくとも私にとっては)驚くほど読みやすく、理解しやすいものです。彼らはそれが実際にどのように機能するか、そしてあなたがあなたのニーズに合うようにそれをどのように微調整することができるかを理解するのにあなたを大いに助けることができます。