我将 GWT 2.4 与编辑器和请求工厂框架一起使用。我有一个模型,Trip,它有一个地址“来源”和一个地址“目的地”。通过 UI 创建行程时,会自动创建两个地址并分配给行程。用户填写详细信息并保存。出于某种原因,我在尝试坚持到服务器时收到“autobean freeze 错误”。此代码在 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 中的某处,会引发上述错误。奇怪的是,实体保存在服务器上,但不强制执行验证。当我简化模型并删除地址关联时,验证和保存工作。我的主要问题是 autobean freeze 错误;验证的东西是次要的。
编辑:在进一步调查中,我发现实体可以正常访问服务器并按预期持续存在。它在返回时抛出上述异常。AddressProxy 是一个 ValueProxy,看起来 RF 不喜欢 Trip 带着这些关联回来。返回 null '修复'问题,但这显然不会长期工作。