有誰知道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