2014-01-24 3 views
0

У меня проблема с вызовом RPC в GWT. Ниже приведен пример фрагмента кода:GWT- Задержка асинхронного вызова

У меня есть четыре столбца в моем пользовательском интерфейсе с эфдатом и enddate как заголовок столбца. Значения не отображаются в порядке. Первое значение столбца отображается в третьем столбце. В большинстве случаев заказ меняется. Отображение в случайном порядке.

Я предполагаю, что вызов RPC для метода на стороне сервера для каждого счета задерживается. , и я узнал, отлаживая метод на стороне сервера, дата и дата окончания, которые я прохожу для первого цикла, иногда выполняют 2 или 3. Это перетасовка.

Может ли кто-нибудь помочь мне в этом. какие изменения мне нужно сделать в моем коде, чтобы получить правильные значения, отображаемые в пользовательском интерфейсе. Любая идея по этому поводу?

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, но заражают его асинхронным. Не определено, какой из четырех вызовов будет первым, кто получит ответ от сервера. Вы должны изменить свой код. –

+1

Существует разница между синхронным и асинхронным вызовом. Если вы это понимаете, ваша проблема будет решена. –

+0

Спасибо! Я только начал использовать GWT. Я понимаю, что после запроса асинхронные вызовы не ждут ответов. Вышеприведенный код работает, но порядок отображения неверен. Как заставить его выполнить в правильном порядке? Мне нужно зациклиться на множестве неизвестных номеров вызовов Async и выполнить их в правильном порядке, как я могу это сделать? – 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 ответа помещаются на карту вместе со своим индексом.
Наконец, вы должны создать свой окончательный список с карты.
Надеюсь, что это сработает.

Смежные вопросы