【问题标题】:Wicket Panel not refreshed when swapped in via an AJAX request通过 AJAX 请求交换时检票面板未刷新
【发布时间】:2013-06-04 09:20:36
【问题描述】:

我有一个面板,我最初用另一个面板(一个旋转的圆圈表示“正在加载”)替换它,一段时间后在 AJAX 事件中替换回来。所以我要做的是:

@Override
protected void onConfigure() {
    if (!content.isLoaded()) {
        tmp = new LoadingCircle(getId(), "Loading...");
        this.replaceWith(tmp);
    }
}

public void onLoaded(AjaxRequestTarget target) {
    if (tmp != null) {
        tmp.replaceWith(this);
        tmp = null;
    }
    target.add(this);
}

这可行,因此面板会显示在页面中。但是,此面板有一些带有一些标签的子面板,它们不会刷新。我在重新加载页面时看到更新的标签,但在使用 AJAX 显示整个面板后没有立即看到。

我注意到onConfigureonBeforeRender 方法只被调用一次——当面板被创建时,但当它第一次使用AJAX 实际显示时不会再次调用。子面板也是如此,这样就可以解释为什么它们没有被刷新。但问题是——为什么面板在添加到 AJAX 请求目标时没有刷新(更新后的模型值没有使用)?

编辑:我认为这可能是相关的:https://issues.apache.org/jira/browse/WICKET-5107。不过,我想知道我应该对代码进行哪些更改才能使其正常工作?

【问题讨论】:

  • 首先,为什么不使用 AjaxLazyLoadPanel?在我看来,这正是你想要的。如果 WICKET-5107 确实相关,则应该是某些组件不可见。您能否提供更多应用程序的示例代码?
  • 为我迟到的回复道歉。 AjaxLazyLoadPanel 看起来像要走的路,我不知道!谢谢。
  • 最后我只是改变了这块应用程序的逻辑,这样面板就不需要更换了。 (我应该把这个作为答案还是以其他方式结束这个问题?)

标签: ajax wicket


【解决方案1】:

IMO 看起来您应该使用 AjaxCallDecorator 来代替您尝试对微调器执行的操作。

【讨论】:

  • 嗨!感谢您的建议,尽管我不清楚在我的情况下应该如何使用 AjaxCallDecorator?
猜你喜欢
  • 2012-12-22
  • 2012-04-18
  • 2012-02-07
  • 2013-08-28
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多