1

私のGWTプロジェクトと、単純なドメインオブジェクトがあり、GWT固有のものがない別のプロジェクトがあります。

私のドメインオブジェクトプロジェクトには、いくつかのプリミティブフィールドを持つクラスBobがあります。特にない。彼はその地獄のためにSerializableを実装しています。

このタイプをGWTサービスメソッドから返したかったのです。サービスメソッドがGWTのIsSerializableインターフェイスを実装するクラスのみを返すことができることを知り、BobのサブクラスであるBobSO(Bob Service Object)を作成し、IsSerializableを実装しました。

基本的なプロジェクト構造

proj> Bob.java

proj_gwt
proj_gwt > projgwt.gwt.xml
proj_gwt.client
proj_gwt.server
proj_gwt.shared > BobSO.java

サービスの実行中にエラーが発生します。BobSOをロードしていて、スーパークラスBobのソースを探しているようですが、ソースが見つかりません。「[ファイルへのパス]のエラー6行目:ボブが利用できるソースコードがありません。必要なものを継承するのを忘れましたか?

  1. 彼はIsSerializableを実装しているので、BobSOサブクラスは機能しますか?
  2. GWTはBobSOがどこにあるかを知っているようです。Bob.javaのソースがどこにあるかを知るために何をする必要がありますか?DOmainオブジェクトプロジェクトでgwt.xmlを作成しようとしましたが、表示する必要のある各クラスを一覧表示する必要があるかどうか、およびGWTプロジェクトにインポートする方法がわかりません。
4

3 に答える 3

2

1.直列化可能性

SerializableまたはIsSerializableのいずれかを実装し、さらに、クラスがGWTの直列化可能性の残りの要件(引数なしのコンストラクター、最終フィールドなしなど)を満たしていることを確認します。

2.ソースを見つける

GWT-RPCがシリアル化可能なクラス[*]を見つけるのに役立つモジュールを作成する必要があります。

モジュール「gwt.xml」はドメインプロジェクトに存在できます。または、ドメインプロジェクトに触れたくない場合は、GWTプロジェクトに含めることもできます。必ず正しいパッケージに入れてください。

DomainProject

src
  bar
    domain
      Bob.java

GwtProject

src
  bar
    Domain.gwt.xml (contains <src path='domain'/>)
  foo
    client
      MyEntryPoint.java
    shared
      BobSO.java
    Bar.gwt.xml (contains <src path='client'/>
                          <src path='shared'/>
                          <inherits name="foo.Domain"/>)

重要な注意事項

  • このような依存関係を変更した後は、必ずgwt-unitCacheフォルダーを削除してください。そうしないと、コンパイラーが奇妙な方法で失敗することがよくあります(gwt 2.5.0.rc2でテスト済み)。
  • クライアント側が知る必要のあるすべてのことについて、常にソースフォルダーをGWTコンパイラーに提供します。この場合、これはのソースでもありますbar.domain.Bob

ノート

  • Domain.gwt.xmlを「bar/domain」パッケージに入れて、使用することも可能です。<source path=""/>

[*]ちなみに、依存関係のモジュールを定義することは、通常、GWTでは厳密には必要ではないことは驚くべきことかもしれません。(ただし、GWT-RPCが関係している場合は必須です。)必要に応じて、簡単な例で試してください。GWTコンパイラのクラスパス上にある限り、 GWTはソースを自動的に検出します。

于 2012-10-11T20:53:07.630 に答える
1

彼はIsSerializableを実装しているので、BobSOサブクラスは機能しますか?

動作するはずですが、IsSerializableはGWTの「古い」マーカーインターフェイスであることに注意してください。代わりにjava.io.Serializableを使用できるようになりました。

GWTはBobSOがどこにあるかを知っているようです。Bob.javaのソースがどこにあるかを知るために何をする必要がありますか?DOmainオブジェクトプロジェクトでgwt.xmlを作成しようとしましたが、表示する必要のある各クラスを一覧表示する必要があるかどうか、およびGWTプロジェクトにインポートする方法がわかりません。

ドメインプロジェクトでGWTモジュールを作成するのが正しいアプローチだと思います。各クラスをリストする必要はありません。「source」要素の「path」属性には、子パッケージの名前が含まれている必要があります。

<module>
    <source path="mysubpackage" />
</module>

複数のパッケージがある場合は、複数のソース要素を持つことができます。パッケージから特定のクラスを含める/除外することもできます。例:

<source path="somepackage">
    <include name="SomeClass.java" />
    <include name="stuff/OtherClass.java" />
    <exclude name="blah/**" />
</source>

元のGWTモジュールにインポートするには、作成した.gwt.xmlファイルの完全修飾名を使用して「inherits」エントリを追加しますが、拡張子は「.gwt.xml」ではありません。新しいモジュールファイルの名前がDomain.gwt.xmlで、パッケージ「com.domainpackage」にあるとすると、次のように追加します。

<inherits name="com.domainpackage.Domain" />
于 2012-10-11T16:21:50.760 に答える
0

プロジェクトをjarとしてパッケージ化し、GWTプロジェクトのクラスパスに追加できます。

于 2012-10-11T14:30:28.850 に答える