1

我有这种情况:

我有一个IndicatingAjaxButton. 在onSubmit方法中完成一些操作,然后setResponsePage(otherPage);调用

当操作仍在进行时,忙碌指示符是可见的。但是当操作完成后,指示器消失了,而用户仍在同一页面上,能够进行其他活动,而浏览器正忙于打开其他页面。

我的问题是,只要浏览器忙于打开otherPage.

谢谢

4

1 回答 1

1

首先,您需要确保您确实需要在 ajax 请求中执行此操作。我认为没有必要,除非您setResponsePage()只根据某些条件进行操作,否则执行一些 Ajaxy 操作。

如果您不需要 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 正在准备 javascriptwicketHide(id)调用,一旦请求完成(以及成功或失败),它将有效地隐藏指示器。

我从来没有尝试过这样做,但可能会覆盖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;";
}

请注意,这将始终显示指示器,并且永远不会隐藏它。如果您想根据 asetResponsePage是否完成有条件地隐藏它,例如,您可以通过AjaxRequestTarget, 并return有条件地在您的getSucessScript()andgetFailureScript()实现中定义一个 js 变量。

Wicket 的资料(至少对我来说)非常清晰易读和理解。他们可以帮助您了解它的实际工作原理以及如何调整它以满足您的需求。

于 2013-03-07T16:45:10.933 回答