【问题标题】:Binding List to Datatable After Page Loads (Not Lazy Loading)页面加载后绑定列表到数据表(非延迟加载)
【发布时间】:2011-01-11 06:12:50
【问题描述】:

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

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

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

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

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

我猜我对 JSF/IceFaces 生命周期的概念并不清楚......

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

谢谢!

【问题讨论】:

    标签: java icefaces


    【解决方案1】:

    我找到了使用 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 生命周期已经结束。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      相关资源
      最近更新 更多