2014-01-24 6 views
0

GWT에서 RPC 호출에 문제가 있습니다. 다음은 코드 예제입니다.GWT- 비동기 호출 지연

내 UI에는 effdate가 있고 열 헤더는 enddate 인 열이 4 개 있습니다. 값이 순서대로 표시되지 않습니다. 첫 번째 열 값이 세 번째 열에 표시됩니다. 대부분 주문이 변경됩니다. 무작위로 표시.

각 카운트마다 서버 쪽 방법으로 RPC 호출이 지연됩니다. 그리고 나는 서버 측 방법을 디버깅하여 발견했다. 첫 번째 루프를 위해 지나가고있는 effdate와 end date는 2 ~ 3 번 실행된다. 그것은 걷고있다.

어느 누구도이 문제를 해결할 수 있습니까? 올바른 값을 UI에 표시하려면 코드에서 수행해야 할 변경 사항 이것에 대한 아이디어가 있으십니까?

count=4; 
    List finalList = new arrayList(); 
    for(i=0;i<count;count++) 
    { 
    effdate= list.get(countincr); 
    enddate= list.get(countincr+1); 
    //call to server side method to fetch values from DB by passing effdate and end date as parameter. 
    grp.ratecalc(startdate,enddate,new AsyncCallback<List<grVo>>() 
    { 
    public void onfailure(throwable caught) 
    { 
    sys.out.print("failure"); 
    } 
    public void onsuccess(List<grVo> result) 
{ 
List grpList= new GrpVO(); 

rate = result.get(0).getrate(); 
rate1 = result.get(0).getrate1(); 

grpList.setrate(); 
grpList.setrate1(); 

setting values in bean for the remaining values in the result. 

finalList.add(grpList); 


if(finalList.size()== count) 
{ 
//calling a method to populate the values 
methoddisplay(finalList); 

} 
} 
} 
); 
countincr+=2; 

} //end of for loop` 
+0

코드가 작동하지 않습니다. 당신은 RCP 호출을 동시 처리하지만 비동기 적으로 감염시킵니다. 4 개의 호출 중 어느 것이 서버로부터 응답을 수신하는 첫 번째 호출인지는 정의되지 않습니다. 코드를 재 설계해야합니다. –

+1

동기 및 비동기 호출간에 차이가 있습니다. 당신이 그것을 이해한다면, 당신의 문제는 해결 될 것입니다. –

+0

감사합니다 !! 방금 GWT를 사용하기 시작했습니다. 일단 요청이 이루어지면 비동기 호출이 응답을 기다리지 않는다는 것을 이해합니다. 위의 코드는 작동하지만 표시 순서가 잘못되었습니다. 올바른 순서로 실행하려면 어떻게해야합니까? 많은 비동기 호출을 반복하고 올바른 순서로 실행해야합니다. 어떻게해야합니까? – Minnie

답변

0

finallist 대신지도를 사용하여 요청 및 응답을 추적 할 수 있습니다.
코드에 몇 가지 변경을가했습니다 (불완전한 .plz가 필요한 변경을가합니다).

int count=4; 
Map<Integer,Object> map = new HashMap<Integer, Object>(); 
for(int i=0;i<count;count++) 
{ final int index=i; 
    effdate= list.get(countincr); 
    enddate= list.get(countincr+1); 
    grp.ratecalc(startdate,enddate,new AsyncCallback<List<grVo>>() 
      { 
     public void onfailure(throwable caught) { 
      sys.out.print("failure"); 
     } 
     public void onsuccess(List<grVo> result){ 
      List grpList= new GrpVO(); 
      rate = result.get(0).getrate(); 
      rate1 = result.get(0).getrate1(); 
      grpList.setrate(); 
      grpList.setrate1(); 
      map.put(index, grpList);     
      //check all items are put on the map and populate values. 
     } 
      } 
      ); 
    countincr+=2; 
} 

여기서 index은 requset 및 응답을 식별하는 데 사용됩니다.
모든 응답 GrpVO 개체는 인덱스와 함께 맵에 배치됩니다.
마지막으로지도에서 최종 목록을 생성해야합니다.
희망 사항.