0

次のスニペットは、Cats のリストを正常に表示しますが、ドライバーをフラッシュすると、Cat オブジェクトの値はすべて null になります。

猫の家の名前は、期待どおりに編集できます。

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 と Cats の正しい値があります。

  • taskPersistRequest.requestData.parameters には、CatHouse の値が 1 つだけあり、Cats に関連するデータはありません。(これが問題のようです

  • コンテキスト内の editProxies 変数には、CatHouse と Cat の正しい値が含まれています。

4

1 に答える 1

1

今日も同様の問題に遭遇しました。同じ RequestContext で Cat アイテムが作成される前に CatHouse を作成すると、Cat アイテムがまだ利用できないため、CatHouse の永続化は失敗します。

これを修正するには、最初に Cat Bean を作成し、その後で CatHouse Bean を作成します。

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

ただし、エディター フレームワークを使用する場合にこれを実装するのは簡単ではありません。エディターが Cat インスタンスの作成をトリガーする前に、エディター ドライバーで CatHouse のインスタンスを渡す必要があるためです。

可能な回避策は、CatHouse の前に Cat が作成されるように、フラッシュされた自動 Bean を新しい要求コンテキストにコピーすることです。

(猫の家を作成しているのではなく、単に編集している場合は、 request.create(CatHouse.class) ではなく request.edit(catHouse) の観点から考えてください)

于 2011-06-02T19:11:56.317 に答える