Wicket - 在呈现页面后将数据加载到 table

Wicket - loading data into table after page is rendered

在我的 wicket 应用程序中,我有一个数据table。数据提供者附加到它并从 REST 服务加载内容。此调用需要很多时间(~ 20 秒)。

那么,有没有一种方法可以加载空页面 table,然后在使用来自服务的数据呈现后重新填充它?

我考虑过在呈现页面后重新附加或重新加载数据提供程序:

onAfterRender()

但我仍然不知道如何使用数据提供程序来做到这一点。

您可以查看 AjaxLazyLoadPanel,它在加载组件时显示一个小加载图标作为占位符。

add(new AjaxLazyLoadPanel("table") {

    @Override
    public Component getLazyLoadComponent(String markupId) {
        return new MyLongLoadingTable(markupId);
    }
});

另一个解决方案:显示空 table 并定期检查数据库操作是否完成,并在所有数据收集完成后更新 table。 AbstractAjaxTimerBehavior 是一个很好的实用程序。像这样:

add(new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {

    @Override
    protected void onTimer(AjaxRequestTarget target) {

        if (isDataLoaded()) {
            stop(target);
            target.add(table);
        }

    }

});