基本的GWT异步调用误解

时间:2009-02-11 20:41:06

标签: gwt

我似乎对GWT异步调用的工作方式和/或收到回调时如何更新小部件产生了一些根本性的误解。

我创建了两个接口以及实现,它们似乎彼此通信。我根据在使用eclipse调试器时观察到的合理外观数据做出此声明:下面的onSuccess方法中的result变量包含我期望它的内容以及我尝试填充的网格最终被填充来自循环的results数据。但是,当onSuccess调用返回时,根据uhpScrollPanel.setWidget(uhpGrid)调用,我的GUI中不显示任何网格,并且不会抛出任何类型的异常。

我一定是在忽视一些显而易见的事情,有没有人知道在哪里看?

    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 :(得分:0)

您的onSuccess()方法未正确定义,作为接收Object的参数,您必须在之后将其向下转发。

意思是,签名应该是:

public void onSuccess(Object result)

之后,您可以明确地向下转发您知道回来的对象:

List<UpdateHistoryEntryBean> resultList = (List<UpdateHistoryEntryBean>) result;

答案 1 :(得分:0)

事实证明,快速修复是将网格添加到VerticalPanel而不是ScrollPanel。现在的问题变成了 - 为什么要重要,我们如何解决这个难题?