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

时间:2015-05-17 17:42:45

标签: gwt

我创建了一个包含联系人的CellTable。某些联系人已由客户填写到表中。在onModuleLoad函数中,请求另一个Contact对象。现在我想在表格中添加另一行

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

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???
        }
    }
);

2 个答案:

答案 0 :(得分:0)

您需要做的就是致电:

cList.add(result);

答案 1 :(得分:0)

问题是dataProvider.getList().add(result);的执行引发了异常,因为列表中不支持“添加”功能。我认为原因是dataProviderfinal。这是解决方案:

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