有谁知道GWT的CellTable使用RequestFactory的例子,该表正在编辑?我想列出表格中的对象(每行是一个对象,每列是一个属性),能够轻松添加新对象并进行编辑。我知道Google的DynaTableRf示例,但那个不能编辑。GWT RequestFactory + CellTable
我搜索谷歌和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中,在客户端创建?
* on fieldUpdater当我得到一个可编辑的对象时 - 我应该将它插回到表中还是忘了它?
感谢您的任何帮助。
托马斯,谢谢你的回答!我用一次创建的字段将所有调用替换为personRequest()。但比我得到“java.lang.IllegalStateException:请求已在进行中”。我检查了是否有一些“scheduleFire”方法,但事实并非如此。我想我应该平衡,并以某种方式明智地使用创建背景,跟踪它们并关心它们何时进行,何时不进行。但我觉得像发明热水......有没有任何示例/教程已经与CellFable上的RequestFactory(或一些类似的编辑部件)做到这一点?必须有一些确定的解决方案。 – hostnik
我发现了一个很好的博客,很好地解释了关于RequestFactory的一些细节:http://fascynacja.wordpress.com/2011/04/17/exciting-life-of-entity-proxies-in-contexts-of-requestfactory/ – hostnik
你能否解释你对编辑框架的评论?是否有一些根本的原因,CellTable(或DataGrid)不应该被期望与RequestFactoryEditorDriver相得益彰? – gatkin