1

私の GWT アプリには、次のモデル クラスがあります。

import com.google.gwt.user.client.rpc.IsSerializable;

public class TestEntity implements IsSerializable {
    public String testString;
}

このクラスは、GWT のカスタム IsSerializable マーカー インターフェースを実装します。これは、GWT だけでなくモデル クラスを使用するため、あまり好きではありません。だから私は java.io.Serializable を好みます。

しかし、IsSerializable の代わりに Serializable を実装するようにクラスを変更すると、GWT RPC メカニズムが機能しなくなります。サーバー側ではエラーは発生しませんが、クライアントでは AsyncCallback.onFailure が呼び出されます。

私は使っている...

  • GWT 1.7.0。
  • 春 2.5.6.SEC01
  • Spring と GWT は、こちらで説明されているように構成されています。
4

3 に答える 3

1

このSpring-MVCとGWTのハイブリッド手法が、私の新しい仕事のコードベースで使用されていることがわかりました。私が得ていたエラーが似ていたのも不思議ではありません。この投稿に感謝します-問題を特定して修正するのに役立ちました。私たちが持っていたコードは、あなたが投稿した記事の古いコードに基づいていました-またはそのコードが基づいていたものは何でも!盗作はたくさんあります!

要約すると、その記事はGWTをSpring-MVCと統合する方法を提案しています。ソリューションの要点は、SpringMVCコントローラーとGWTRemoteServiceServletを組み合わせたサーブレットサーブレットクラスを提供することです。コードがGWT-1.4より前のコードに基づいていたため、シリアル化可能なDTOオブジェクトはサポートされませんでした。これは、GWTのisSerializableマーカーインターフェイスを実装していないDTOに対応できませんでした。何が起こっているのかがわかれば、コントローラークラスの更新は非常に簡単です...

私が見る2つの固定行は、SerializationPolicyProvider(RPC.decodeRequest()メソッドの最後のパラメーターの「this」です。呼び出し側クラスは、SerializationPolicyProviderであるGWTのRemoveServiceServletを拡張します)を通過するだけです。私が推測するこの簡単な修正により、更新された(1.4以降の)GWTコードが呼び出され、SerializableクラスとisSerializableクラスを処理できます。SerializationPolicyProviderは、serializationPolicyを調べます。

2番目の修正は、serializationPolicyをRPC.invokeAndEncodeResponse()メソッドに渡します。これは、GWTモジュールのコンパイル時に検証されたDTOオブジェクトの*.gwt.rpcホワイトリストだと思います。

于 2010-03-30T23:07:00.380 に答える
0

あなたが受け取るエラーは正確には何ですか?私たちは何の問題もなくDTOにSerializableを使用しているので、あなたもできるはずです。

于 2009-08-29T12:27:45.627 に答える