在我的wicket应用程序中,我有一个数据表。数据提供程序附加到它并从REST服务加载内容。这个电话需要很多时间(约20秒)。
那么,有没有办法用空表加载页面,然后在用服务中的数据渲染后重新填充它?
我想在渲染页面后重新附加或重新加载dataprovider:
onAfterRender()
但我仍然不知道如何使用数据提供者。
答案 0 :(得分:3)
您可以查看AjaxLazyLoadPanel
,它会在加载Component时显示一个小的加载图标作为占位符。
add(new AjaxLazyLoadPanel("table") {
@Override
public Component getLazyLoadComponent(String markupId) {
return new MyLongLoadingTable(markupId);
}
});
另一种解决方案:显示空表并定期检查数据库操作是否完成,并在完成所有数据收集后更新表。 AbstractAjaxTimerBehavior
是一个很好的实用工具。像这样:
add(new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
@Override
protected void onTimer(AjaxRequestTarget target) {
if (isDataLoaded()) {
stop(target);
target.add(table);
}
}
});