2011-01-11 2 views
0

우리 페이지에는 웹 서비스의 레코드를 보여주는 데이터 테이블이 있습니다. 웹 서비스는 데이터베이스를 쿼리하며 쿼리는 10 초에서 100 초까지 걸릴 수 있습니다.페이지로드 후 Datatable에 바인딩 목록 (지연로드 없음)

내가 처음에 후원 콩 생성자의 데이터 테이블에 바인더 제본 ArrayList를로드하는이 시나리오에서는

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

을, 전체 페이지는 웹 서비스는 모든 데이터를 반환 후에 만 ​​렌더링하기 시작합니다.

나머지 페이지를 병렬로로드하고 웹 서비스가 실행되는 동안 진행률 표시 줄이나 데이터 테이블에 무엇인가를 표시하려면 웹 서비스 (즉, myList = WebServices.getList();)를 호출해야합니까?

나는 그것에 대해 우리가 너무 우리, 데이타베이스 쿼리에 페이지 매김을 구현해야하기 때문에

또한,이 약 게으른 로딩하지 ...는 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) 
      { 

      } 
     } 

    } 
} 

초기에는 더 나는 PersistentFacesStateexecuteAndRender();의 인식하지, 그래서 스레드가 배열 목록을 업데이트에도 불구하고,보기는 새로 고칠 수 없습니다. 이는 JSF/IceFaces 라이프 사이클이 이미 종료 되었기 때문입니다.

보기를 유지 한 다음 다시 렌더링하여이 문제도 해결했습니다.

이 솔루션이 도움이되기를 바랍니다.