Кажется, я страдаю от некоторого фундаментального неправильного понимания того, как работают асинхронные вызовы GWT и / или как обновляются виджеты после получения обратного вызова.
Я создал два интерфейса, а также реализацию, и они, кажется, взаимодействуют друг с другом. Я делаю это утверждение на основе разумно выглядящих данных, наблюдаемых во время пошагового отладчика eclipse: переменная result
в методе onSuccess, приведенном ниже, содержит то, что я ожидаю, и сетка, которую я пытаюсь заполнить, в итоге заполняется данными с results
при выходе из цикла. Однако, когда возвращается вызов onSuccess
, в моем графическом интерфейсе не отображается сетка в соответствии с вызовом uhpScrollPanel.setWidget(uhpGrid)
, и не выдается никаких исключений.
Должно быть, я упускаю из виду нечто очевидное, у кого-нибудь есть идеи о том, где искать?
final ScrollPanel uhpScrollPanel = new ScrollPanel();
uhpVert.add(uhpScrollPanel);
uhpScrollPanel.setSize("100%", "100%");
//build and populate grid
UpdateHistoryServiceAsync uhpService = UpdateHistoryService.Util.getInstance();
uhpService.getUpdateHistory(new AsyncCallback<List<UpdateHistoryEntryBean>>() {
public void onFailure(Throwable caught) {
System.out.println("OnFailure");
caught.printStackTrace();
final Label uhpErrorLabel = new Label("Server Unable to Grab History...");
uhpScrollPanel.setWidget(uhpErrorLabel);
uhpErrorLabel.setSize("100%", "100%");
}
public void onSuccess(List<UpdateHistoryEntryBean> result) {
int length = result.size();
final Grid uhpGrid = new Grid();
uhpScrollPanel.setWidget(uhpGrid);
uhpGrid.setBorderWidth(1);
uhpGrid.setSize("100%", "100%");
uhpGrid.resize(length, 3);
int i = 0;
for (UpdateHistoryEntryBean entry : result) {
uhpGrid.setText(i, 0, String.valueOf(entry.getSourceId()));
uhpGrid.setText(i, 1, entry.getTitle());
uhpGrid.setText(i, 2, entry.getBody());
i++;
}
}
});