如何从 AsyncCallback 的 onSuccess 函数中向 GWT CellTable 添加一行?

How can I add a row to a GWT CellTable from within the onSuccess function of an AsyncCallback?

我创建了一个包含联系人的 CellTable。部分联系人已由客户填写到 table 中。在 onModuleLoad 函数中,请求了一个附加的 Contact 对象。现在我想在 table

中再添加一行

在函数 onModuleLoad 中,我添加了 table 小部件,在 onSuccess 中,我想向 table 添加一个新的数据行,其中包含收到的联系人:

List<Contact> cList = getKnownContacts();
CellTable<Contact> table = new CellTable<Contact>();
final ListDataProvider<Contact> dataProvider = new ListDataProvider<Contact>();
dataProvider.setList(cList);
dataProvider.addDataDisplay(table);

// Create name column.
TextColumn<Contact> nameColumn = new TextColumn<Contact>() {
    @Override
    public String getValue(Contact contact) {
        return contact.getName();
    }
};

// Create address column.
TextColumn<Contact> addressColumn = new TextColumn<Contact>() {
    @Override
    public String getValue(Contact contact) {
        return contact.getAddress();
    }
};

table.addColumn(nameColumn, "Name");
table.addColumn(nameColumn, "Address");

RootPanel.get().add(table);

contactService.getContactById(1234,
    new AsyncCallback<Contact>() {
        public void onFailure(Throwable caught) {
            ...
        }

        public void onSuccess(Contact result) {
            // add row to table???
        }
    }
);

您只需致电:

cList.add(result);

问题是 dataProvider.getList().add(result); 的执行抛出异常,因为列表不支持 "add" 函数。我认为这是因为 dataProviderfinal。解决方法在这里:

List<Contact> newList = new ArrayList<Contact>(dataProvider.getList());
newList.add(result);
dataProvider.refresh();