有谁知道使用 RequestFactory 的 GWT 的 CellTable 示例并且该表正在被编辑?我想在表格中列出对象(每一行是一个对象,每一列是一个属性),能够轻松添加新对象和编辑。我知道谷歌的 DynaTableRf 例子,但那个没有编辑。
我搜索了 Google 和 stackoverflow,但没有找到。我对 RF 的上下文有点困惑,而且人们还提到了一些“驱动程序”。
为了演示我目前到达的位置,我附上了一列的代码:
// Create name column.
Column<PersonProxy, String> nameColumn = new Column<PersonProxy, String>(
new EditTextCell()) {
@Override
public String getValue(PersonProxy person) {
String ret = person.getName();
return ret != null ? ret : "";
}
};
nameColumn.setFieldUpdater(new FieldUpdater<PersonProxy, String>() {
@Override
public void update(int index, PersonProxy object, String value) {
PersonRequest req = FaceOrgFactory.getInstance().requestFactory().personRequest();
PersonProxy eObject = req.edit(object);
eObject.setName(value);
req.persist().using(eObject).fire();
}
});
和我的数据提供者代码:
AsyncDataProvider<PersonProxy> personDataProvider = new AsyncDataProvider<PersonProxy>() {
@Override
protected void onRangeChanged(HasData<PersonProxy> display) {
final Range range = display.getVisibleRange();
fetch(range.getStart());
}
};
personDataProvider.addDataDisplay(personTable);
...
private void fetch(final int start) {
lastFetch = start;
requestFactory.personRequest().getPeople(start, numRows).fire(new Receiver<List<PersonProxy>>() {
@Override
public void onSuccess(List<PersonProxy> response) {
if (lastFetch != start){
return;
}
int responses = response.size();
if (start >= (personTable.getRowCount()-numRows)){
PersonProxy newP = requestFactory.personRequest().create(PersonProxy.class);
response.add(newP);
responses++;
}
personTable.setRowData(start, response);
personPager.setPageStart(start);
}
});
requestFactory.personRequest().countPersons().fire(new Receiver<Integer>() {
@Override
public void onSuccess(Integer response) {
personTable.setRowCount(response+1, true);
}
});
}
我尝试将最后一个对象插入一个新的空对象。当用户填写它时,我会在它之后插入一个新的。但是代码不起作用。我说用户正在“尝试”编辑以前由另一个 RequestContext 编辑的对象。
困境:
*我是否创建了太多上下文?
* 如何正确地将新对象插入到客户端创建的 celltable 中?
* 当我得到一个可编辑对象时在 fieldUpdater 上 - 我应该将它插入到表中还是忘记它?
谢谢你的帮助。