0

以下代码段成功显示了 Cat 列表,但是当我刷新驱动程序时,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 = [猫屋]

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

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

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

4

1 回答 1

1

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

要解决这个问题:首先创建 Cat bean,然后创建 CatHouse bean:

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

然而,在使用编辑器框架时实现这一点并非易事,因为它需要您在编辑器驱动程序中传递一个 CatHouse 实例,然后编辑器才会触发 Cat 实例的创建。

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

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

于 2011-06-02T19:11:56.317 回答