1

セットアップは次のとおりです。私は gwt-platform 0.7 で GWT 2.4 を使用しています。キーと値のペアを含むクラスがたくさんあります (現時点では int->String)。JPAを介してデータベース内の異なるテーブルに保存されるため、それらは単なる異なるクラスです。

ここで、サーバーからこのデータを取得するための 1 つの (!) メソッドが必要です。

最初に、 を使用してフェッチしたいクラスをサーバーに送信しようとしましたArrayList<Class<?>>。と答えHashMap<Class<?>, HashMap<Integer, String>>ます。しかし、GWT ではシリアライズが許可されていませんClass<?>。このようにして、すべてのデータベース エントリを取得し、適切なクラスを関連付けて (これは重要です) 非常に簡単に表示することができました。

今、私は多くのコードを書かなくても動作させる別の方法を探しています。

最初の新しいアイデアは、フォルダーHashMap<String, Class<?>>内のどこかに配置しshared、文字列をネットワーク経由で転送することでした。したがって、クライアントとサーバーは、HashMap の文字列を介してクラスを見つけて、新しいオブジェクトを作成する必要があります。

これに対する他の良い解決策はありますか?

ありがとうございました。

4

1 に答える 1

0
public Enum ClassType {
  A, B, C
}

public class AType {
  HashMap<Integer, String> myHashMap;
  ClassType getClassType() {
      return ClassType.A;
  }
}

public interface TransferableHashMap extends IsSerializable {
   ClassType getClassType();
}

public interface transferService extends RemoteService {
    HashSet<TransferableHashMap> getMaps(HashSet<ClassType> request);
}


//somewhere on the client
final Set<AType> as = new Set<AType>();
final Set<BType> bs = new Set<BType>();
final Set<CType> cs = new Set<CType>();

Set<ClassType> request = new HashSet<ClassType>();
request.add(ClassType.A);
request.add(ClassType.B);
request.add(ClassType.C);

transferService.getMaps(request, 
  new AsyncCallback<HashSet<TransferableHashMap>>(){

  @Override
  public void onSuccess(HashSet<TransferableHashMap>> result) {
      for (TransferableHashMap entry : result) {
        if(entry instanceof Atype) as.add((AType)entry);
        else if(entry instanceof Btype) bs.add((BType)entry);
        else if(entry instanceof Ctype) cs.add((CType)entry);
        else throw new SerializationException();
        }
    }
  });

それが私がそれをする方法です。

于 2012-06-14T21:32:55.233 に答える