这是设置:我正在使用GWT 2.4和gwt平台0.7。我有一堆包含键值对的类(目前为 int->String)。它们只是不同的类,因为它们通过 JPA 保存到数据库中的不同表中。
现在我想有一个(!)方法来从服务器获取这些数据。
我首先尝试使用 ArrayList<Class<?>>
将我想获取的类发送到服务器。并用HashMap<Class<?>, HashMap<Integer, String>>
回答.但是 GWT 不允许序列化Class<?>
.这样,我可以很容易地获取所有数据库条目,并将它们与正确的类相关联(这很重要)一起显示。
现在我正在寻找另一种方法让它工作,而无需编写大量代码。
第一个新想法是在shared
文件夹内的某个地方有一个HashMap<String, Class<?>>
,然后通过网络传输字符串。因此,客户端和服务器必须通过 HashMap 中的字符串查找类来创建一个新对象。
还有其他好的解决方案吗?
谢谢。
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();
}
}
});
我就是这样做的。