1

这是设置:我使用 GWT 2.4 和 gwt-platform 0.7。我有一堆包含键值对的类(目前是 int->String)。它们只是不同的类,因为它们通过 JPA 保存到数据库中的不同表中。

现在我想要一个(!)方法来从服务器获取这些数据。

我首先尝试将我想使用的类发送到服务器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 回答