Фундаментальное недопонимание асинхронного вызова GWT - PullRequest
0 голосов
/ 11 февраля 2009

Кажется, я страдаю от некоторого фундаментального неправильного понимания того, как работают асинхронные вызовы 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++;
            }
        }

    });

Ответы [ 2 ]

0 голосов
/ 12 февраля 2009

Что ж, получается, что быстрое решение заключается в добавлении сетки в VerticalPanel, а не в ScrollPanel. Теперь возникает вопрос - почему это должно иметь значение, и как мы можем обойти эту дилемму?

0 голосов
/ 12 февраля 2009

Ваш метод onSuccess() не определен правильно, в качестве параметра он получает Object, и вы должны впоследствии его уменьшить.

Значение подписи должно быть:

public void onSuccess(Object result)

После этого вы можете явно убрать объект, который, как вы знаете, вернули, так:

List<UpdateHistoryEntryBean> resultList = (List<UpdateHistoryEntryBean>) result;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...