gpt4 book ai didi

gwt - GWT RequestFactory + CellTable

转载 作者:行者123 更新时间:2023-12-02 04:05:49 24 4
gpt4 key购买 nike

有谁知道使用RequestFactory的GWT CellTable示例,并且正在编辑该表?我想列出表中的对象(每一行是一个对象,每一列是一个属性),能够轻松添加新对象并进行编辑。我知道Google的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上-我应该将其插入表还是忘掉它?

谢谢你的帮助。

最佳答案

  • 我创建了太多上下文吗?


  • 是。

    每个HTTP请求应该有一个上下文(每个 fire()),而不是 fire() d的上下文是无用的(仅当您/用户改变主意并且不想保存时才这样做)变化)。
    实际上,您只需要删除一个上下文(请参见下文)。

    请注意,您保存每个字段更改的方法可能会导致“竞赛条件”,因为一次代理最多只能由一个上下文 edit()编码,并且该代理将一直附加到上下文,直到服务器响应为止(并且一旦上下文触发后,代理也会被冻结(只读),直到服务器响应为止。
    (并非在所有情况下都是如此:当调用onConstraintViolation时,上下文及其代理未冻结,因此您可以“修复”约束违例并再次触发上下文;这应该是安全的,因为在服务器端进行验证之前,任何服务方法都称为)。


  • 如何将新对象正确插入到客户端创建的celltable中?


  • 您的代码看起来还可以,只是您应该在与用于持久化代理的上下文相同的上下文中创建代理。


    当我得到一个可编辑的对象时,在fieldUpdater上使用
  • -我应该将其插入表中还是忘记它?


  • 我不确定100%,但是我认为您应该刷新表格(类似于 setRowData(index, Collections.singletonList(object)))

    顺便说一句,驾驶员们提到的可能是 Editor framework中的 RequestFactoryEditorDriver。这对您没有帮助(实际上恰恰相反)。

    关于gwt - GWT RequestFactory + CellTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7724750/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com