2011-01-11 45 views
0

我們的頁面有一個數據表,顯示來自Web服務的記錄。 Web服務查詢數據庫,查詢可能需要10秒到100秒。頁面加載後綁定列表到數據表(不延遲加載)

我最初加載綁定到輔助Bean的構造DataTable中的數組列表:

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

在這種情況下,整個頁面開始呈現web服務返回的所有數據之後。

我應該在哪裏調用Web服務(即,做myList = WebServices.getList();)以便並行加載其餘頁面,並在Web服務運行時在數據表中顯示進度條或其他內容?

我想我對JSF/ICEfaces的生命週期的概念都不清楚......

此外,這是不是延遲加載,因爲我們將必須實現分頁我們查詢於數據庫,太。

謝謝!

回答

0

我發現了一個使用線程的工作。

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

      } 
     } 

    } 
} 

Initally我不知道PersistentFacesStateexecuteAndRender();的,所以即使線將更新數組列表中,有人沒有被刷新。這是因爲JSF/IceFaces生命週期已經結束。

堅持視圖,然後重新渲染它也解決了這個問題。

希望此解決方案可以幫助某人。