Я использую GWT 2.4 с редактором и запрашиваю заводские рамки. У меня есть модель Trip, у которой есть адрес «происхождение» и адрес «назначения». При создании Поездки через пользовательский интерфейс два адреса создаются автоматически и назначаются Поездке. Пользователь заполняет данные и сохраняет. По какой-то причине я получаю «ошибку зависания автобина» при попытке сохраниться на сервере. Этот код работал в GWT 2.3, и я не могу переключиться обратно. Я надеюсь, что это не ошибка в GWT 2.4. Вот пример кода того, что я делаю:
RequestContext request = requestFactory.request();
TripProxy trip = request.create(TripProxy.class);
trip.setOrigin(request.create(AddressProxy.class));
trip.setDestination(request.create(AddressProxy.class));
driver.edit(trip, request);
this.trip = trip;
// … on save button clicked (different method)
RequestContext request = driver.flush();
request.save(trip).with(driver.getPaths()).fire(someReceiverImpl);
Результат:
java.lang.IllegalStateException: The AutoBean has been frozen
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.checkFrozen(AbstractAutoBean.java:195)
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.setProperty(AbstractAutoBean.java:270)
at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
Вызов fire
завершается успешно, но где-то внутри requestfactory выдается указанная выше ошибка. Любопытно, что объект сохраняется на сервере, однако проверки не применяются. Когда я упрощаю модель и удаляю ассоциации Address, проверка и сохранение работают. Моя главная проблема - ошибка зависания автобина; материал проверки является вторичным.
РЕДАКТИРОВАТЬ: При дальнейшем расследовании я обнаружил, что объекты нормально попадают на сервер и сохраняются, как и ожидалось. По возвращении возникает указанное выше исключение. AddressProxy — это ValueProxy, и похоже, что RF не нравится, когда Trip возвращается с этими ассоциациями. Возврат null "исправляет" проблему, но это, очевидно, не будет работать в долгосрочной перспективе.