1

mysql データベースから arrayList を返して GWT の cellList で使用しようとしていますが、シリアル化の問題が発生しています。

タイプ「com.cbs.ioma.client.Order」が、この SerializationPolicy によってシリアル化できるタイプのセットに含まれていなかったか、そのクラス オブジェクトをロードできませんでした。セキュリティ上の理由から、この型はシリアル化されません。: インスタンス = Order [orderNumber=1001, orderer=test, assembler=1, dateCompleted=1969-12-31, dateSubmitted=1969-12-31, notes=rer, isComplete=偽、タイプ=エラー]

私はクラス Order を持っていますが、それを変更しようとすると

public class Order implements java.io.Serializable

プログラムがクラッシュし、エラー メッセージは表示されません。GWT 内のシリアル化についてよく知らないので、GWT で使用するクラスをシリアル化するにはどうすればよいですか? サービスとserviceAyncクラスに正しい関数名があると思います。ありがとう。

編集:ここにもう少し追加します。注文クラスを変更して isSerializable を実装しようとしたところ、このエラーが発生しました

12:55:49.793 [エラー] [ioma] キャッチされていない例外がエスケープされました

java.lang.ClassCastException: com.cbs.ioma.client.Order は、com.google.gwt.text.shared.SimpleSafeHtmlRenderer.render(SimpleSafeHtmlRenderer.java:1) で java.lang.String にキャストできません。 gwt.cell.client.AbstractSafeHtmlCell.render(AbstractSafeHtmlCell.java:80) at com.google.gwt.user.cellview.client.CellList.renderRowValues(CellList.java:527) at com.google.gwt.user.cellview. client.AbstractHasData$View.renderRowValues(AbstractHasData.java:337) at com.google.gwt.user.cellview.client.AbstractHasData$View.replaceAllChildren(AbstractHasData.java:239) at com.google.gwt.user.cellview. client.HasDataPresenter.resolvePendingState(HasDataPresenter.java:1351) at com.google.gwt.user.cellview.client.HasDataPresenter.access$3(HasDataPresenter.java:1062) at com.google.gwt.user.cellview.client.HasDataPresenter$2.execute(HasDataPresenter.java:984) at com.google.gwt.core.client.impl.SchedulerImpl$Task$.executeScheduled$(SchedulerImpl.java:50) at com.google.gwt.core.client.impl .SchedulerImpl.runScheduledTasks(SchedulerImpl.java:228) com.google.gwt.core.client.impl.SchedulerImpl.flushFinallyCommands(SchedulerImpl.java:327) com.google.gwt.core.client.impl.Impl.exit (Impl.java:266) com.google.gwt.core.client.impl.Impl.entry0 で (Impl.java:257) sun.reflect.GeneratedMethodAccessor24.invoke で (不明なソース) sun.reflect.DelegatingMethodAccessorImpl.invoke で(不明なソース) com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) で java.lang.reflect.Method.invoke (不明なソース) com.google.gwt.dev.shell で。 MethodDispatch.invoke(MethodDispatch.java:71) com で。google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293) com.google.gwt.dev.shell. java.lang.Thread.run の com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364) の BrowserChannelServer.processConnection(BrowserChannelServer.java:547) (不明なソース)

注文を文字列にキャストする理由がわかりません。ここに欠けているシリアライゼーションについて何か基本的なことがあると感じています。誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

1

を使用してクライアントからサーバーへ、またはクライアントからサーバーへデータ型を転送できるようにするには、またはインターフェイスを実装して、データ型をシリアライズGWT-RPC可能としてマークする必要があります。また、クラス フィールド (まったくシリアル化されない final/transient フィールドを除く) のシリアル化可能性と、デフォルトのゼロ引数コンストラクター (またはまったくない) の存在を確認する必要があります。IsSerializableSerializable

編集: final フィールドのシリアル化は、実際には審査中です。

何らかの理由でこれらの要件を満たすことができない場合はDTO、クライアント/サーバーとの間で転送するために、オブジェクト データで満たされた を使用する必要があります。または、そのクラスに独自のカスタム シリアライザーを実装することもできます。

必要に応じて、 GWT シリアライゼーションのドキュメントとjava.io.Serializable サポートを参照してください。また、war ディレクトリ内のすべての *.gwt.rpc ファイルを消去して、シリアライゼーション ポリシーの再作成を強制します。

于 2013-04-19T08:10:36.610 に答える