Как редактировать элементы списка в GWT CellTable, используя редактор с Driver и RequestFactory - PullRequest
0 голосов
/ 01 июня 2011

Следующий фрагмент успешно отображает список 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 с нет данных, связанных с кошками. ( это выглядит как проблема )

  • Переменная editProxies в контексте имеет правильные значения для CatHouse и Cat.

1 Ответ

1 голос
/ 02 июня 2011

Я столкнулся с подобной проблемой сегодня.Если вы создадите CatHouse до того, как будут созданы элементы Cat, в том же RequestContext сохранение CatHouse не удастся, потому что элементы Cat еще не доступны.

Чтобы исправить это: сначала создайте bean-компоненты Cat и создайтеBean-компоненты CatHouse впоследствии:

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

Реализация этого при использовании среды редактора не тривиальна, так как она требует, чтобы вы передали экземпляр CatHouse в драйвер редактора, прежде чем редактор запустит создание Catэкземпляры.

Возможный обходной путь - скопировать очищенный автоматический bean-компонент в новый контекст запроса таким образом, чтобы Cats создавались до создания CatHouse.

(Если вы не создаете, но просто редактируя кошачий дом, думайте в терминах request.edit (catHouse), а не request.create (CatHouse.class))

...