页面加载后绑定列表到数据表(不延迟加载)

时间:2011-01-11 06:12:51

标签: java icefaces

我们的页面有一个数据表,显示来自Web服务的记录。 Web服务查询数据库,查询可能需要10秒到100秒。

我最初加载绑定到支持bean构造函数中的数据表的arraylist:

private ArrayList myList;
public MyBean
{
     myList = WebServices.getList();
}

在这种情况下,只有在Web服务返回所有数据后,整个页面才会开始呈现。

我应该在哪里调用webservice(即,myList = WebServices.getList();)以使页面的其余部分并行加载,并在webservice运行时在数据表中显示进度条或其他内容?

我想我关于JSF / IceFaces生命周期的概念并不清楚......

此外,这不是关于延迟加载,因为我们还必须在数据库查询中实现分页。

谢谢!

1 个答案:

答案 0 :(得分:0)

我找到了一个使用Threads的工作。

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)
            {

            }
        }

    }
}

最初我不知道PersistentFacesStateexecuteAndRender();,所以即使线程更新数组列表,视图也不会被刷新。这是因为JSF / IceFaces生命周期已经结束。

坚持视图然后重新渲染它也解决了这个问题。

希望此解决方案可以帮助某人。