Java 页面加载后将列表绑定到Datatable(非延迟加载)
我们的页面有一个datatable,它显示来自web服务的记录。web服务查询数据库,查询时间从10秒到100秒不等 我最初是在后台bean构造函数中加载绑定到datatable的arraylist:Java 页面加载后将列表绑定到Datatable(非延迟加载),java,icefaces,Java,Icefaces,我们的页面有一个datatable,它显示来自web服务的记录。web服务查询数据库,查询时间从10秒到100秒不等 我最初是在后台bean构造函数中加载绑定到datatable的arraylist: private ArrayList myList; public MyBean { myList = WebServices.getList(); } 在这种情况下,整个页面仅在web服务返回所有数据后才开始呈现 我应该在哪里调用Web服务(例如,domyList=WebService
private ArrayList myList;
public MyBean
{
myList = WebServices.getList();
}
在这种情况下,整个页面仅在web服务返回所有数据后才开始呈现
我应该在哪里调用Web服务(例如,domyList=WebServices.getList();
),以便在Web服务运行时并行加载页面的其余部分,并在数据表中显示进度条或其他内容
我想我对JSF/IceFaces生命周期的概念还不清楚
此外,这与延迟加载无关,因为为此,我们还必须在datatabase查询中实现分页
谢谢 我找到了一种使用线程的方法
public class MyBean
{
private ArrayList myList;
private PersistentFacesState state;
public MyBean
{
state = PersistentFacesState.getInstance();
myList = new ArrayList();
new Thread(new RunService()).start();
}
public class RunService implements Runnable
{
public void run()
{
try
{
list = WebServices.getList();
state.executeAndRender(); //Need to do this to update view
}
catch(Exception e)
{
}
}
}
}
最初我不知道PersistentFacesState
和executeAndRender()代码>,因此即使线程会更新数组列表,视图也不会被刷新。这是因为JSF/IceFaces生命周期已经结束
持久化视图,然后重新渲染它也解决了这个问题
希望这个解决方案能帮助别人