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);
}
}
});
在我的 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);
}
}
});