Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 页面加载后将列表绑定到Datatable(非延迟加载)_Java_Icefaces - Fatal编程技术网

Java 页面加载后将列表绑定到Datatable(非延迟加载)

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

我们的页面有一个datatable,它显示来自web服务的记录。web服务查询数据库,查询时间从10秒到100秒不等

我最初是在后台bean构造函数中加载绑定到datatable的arraylist:

private ArrayList myList;
public MyBean
{
     myList = WebServices.getList();
}
在这种情况下,整个页面仅在web服务返回所有数据后才开始呈现

我应该在哪里调用Web服务(例如,do
myList=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生命周期已经结束

持久化视图,然后重新渲染它也解决了这个问题

希望这个解决方案能帮助别人