【问题标题】:wicket ajax indicator检票口阿贾克斯指标
【发布时间】:2013-02-19 23:12:50
【问题描述】:

我有这种情况:

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

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

我的问题是,只要浏览器忙于打开otherPage.,如何让指示器仍然可见

谢谢

【问题讨论】:

  • 我不太理解,但是无论控制器中的状态如何,您都可以使用 JS 使指示器可见

标签: ajax wicket busyindicator


【解决方案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 正在准备 JavaScript wicketHide(id) 调用,一旦请求完成(以及成功或失败),它将有效地隐藏指示器。

我从未尝试过这样做,但可能会覆盖getFailureScript()getSuccessScript(),以在执行return 之前创建脚本wicketHide(id),在您的Ajax 行为中应该可以解决问题:

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;";
}

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

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

【讨论】:

  • 感谢您的回答。我不知道这个解决方案是否对我有用,因为唯一出错的是当页面仍在忙于打开另一个页面时指示器变得不可见。所以我不知道 getSuccessScript() 和 getFailureScript() 如何帮助我。我需要的是在浏览器忙于打开另一个页面时让指示器继续亮起。
  • 在执行 wicketHide(id) 之前覆盖 getFailureScript()getSucessScript() 以使 javascript return 有助于避免隐藏指标。如果指示器没有被隐藏,它将一直保持到下一页加载。但是,如果您只想在离开页面时显示指示器,您还不如在 <body> 上添加一个 javascript onunload 事件处理程序,然后显示指示器。
猜你喜欢
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多