2011-01-11 5 views
0

このページには、Webサービスからのレコードを示すデータテーブルがあります。 Webサービスはデータベースに照会し、照会には10秒から100秒かかります。ページロード後のデータテーブルへのバインド

私が最初にバッキングBeanのコンストラクタ内のDataTableにバインドさArrayListにロードされた:このシナリオでは

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

を、ページ全体では、Webサービスは、すべてのデータを返した後にのみレンダリングを開始します。

残りのページを並列に読み込み、Webサービスの実行中にプログレスバーなどを表示するには、Webサービス(つまりmyList = WebServices.getList();)を呼び出す必要がありますか。そのために、我々はあまりにも、私たちのdatatabaseクエリでページネーションを実装する必要があるため

私は

... 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のライフサイクルがすでに終了していたためです。

ビューを保存してから再レンダリングすると、この問題も解決されます。

このソリューションが誰かを助けてくれることを願っています。

関連する問題