私はエディターでGWT2.4を使用しており、ファクトリーフレームワークを要求しています。アドレス'origin'とアドレス'destination'を持つモデルTripがあります。UIを使用してトリップを作成すると、2つのアドレスが自動的に作成され、トリップに割り当てられます。ユーザーが詳細を入力して保存します。何らかの理由で、サーバーに永続化しようとすると「autobeanfrozenerror」が発生します。このコードはGWT2.3で機能し、元に戻すことはできません。GWT2.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のフリーズエラーです。検証は二次的なものです。
編集:さらに調査したところ、エンティティはサーバーに正常に到達し、期待どおりに持続していることがわかりました。戻ったときに、上記の例外がスローされます。AddressProxyはValueProxyであり、RFはこれらの関連付けでTripが戻ってくることを好まないようです。nullを返すと、問題は修正されますが、これは明らかに長期的には機能しません。