如何从 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" 函数。我认为这是因为 dataProvider
是 final
。解决方法在这里:
List<Contact> newList = new ArrayList<Contact>(dataProvider.getList());
newList.add(result);
dataProvider.refresh();
我创建了一个包含联系人的 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" 函数。我认为这是因为 dataProvider
是 final
。解决方法在这里:
List<Contact> newList = new ArrayList<Contact>(dataProvider.getList());
newList.add(result);
dataProvider.refresh();