如何使用带有Driver和RequestFactory的编辑器编辑GWT CellTable中的列表项

时间:2011-06-01 16:50:50

标签: gwt requestfactory gwt-2.2-celltable gwt-editors

以下代码段成功显示了Cats列表,但是当我刷新驱动程序时,Cat对象中的值都为空。

可以按预期编辑猫舍的名称。

HasDataEditor<CatProxy> residentsEditor= HasDataEditor.of(cellTable)

CatHouse{
    String name;
    List<Cat> residents;
}
Cat{
    String name;
    String favoriteColor;
}

以下是我创建请求的方式。 (改编自MobileWebApp示例项目)

// Flush the changes into the editable CatHouse.
final CatHouseRequest context = (CatHouseRequest) clientFactory.getCatHouseEditView().getEditorDriver().flush();

/*
 * Create a persist request the first time we try to save this task. If
 * a request already exists, reuse it.
 */
if (taskPersistRequest == null) {
    taskPersistRequest = context.updateCatHouse(editTask).with(
            clientFactory.getCatHouseEditView().getEditorDriver().getPaths());
}

// Fire the request.
taskPersistRequest.fire(new Receiver<ActionProxy>() {
    @Override public void onConstraintViolation(final Set<ConstraintViolation<?>> violations) {
        ...
    }

    @Override public void onSuccess(final CatHouseProxy response) {
        ... 
    }
});

我已经在它被解雇之前检查了taskPersistRequest变量。

  • taskPersistRequest.propertyRefs = [catHouse]

  • taskPersistRequest.requestContext有 CatHouse的正确值 和猫。

  • taskPersistRequest.requestData.parameters CatHouse只有一个值 没有与Cats相关的数据。 (这看起来 喜欢这个问题

  • 上下文中的editProxies变量 具有正确的值 CatHouse和Cat。

1 个答案:

答案 0 :(得分:1)

我今天遇到了类似的问题。如果在创建Cat项目之前创建CatHouse,则在同一RequestContext上,持久存储CatHouse将失败,因为Cat项目尚不可用。

要解决此问题:首先创建Cat bean并在之后创建CatHouse bean:

cat = request.create(Cat.class)
catHouse = request.create(CatHouse.class)

使用编辑器框架时实现这一点并非易事,因为它要求您在编辑器触发创建Cat实例之前在编辑器驱动程序中传递CatHouse实例。

一种可能的解决方法是以新的请求上下文复制刷新的自动bean,方式是在CatHouse之前创建Cats。

(如果您没有创建,只是编辑猫舍,请考虑request.edit(catHouse)而不是request.create(CatHouse.class))