GWT - Hashmap在响应中为空?

时间:2011-10-10 13:11:44

标签: gwt

我有一个自定义模型,它在内部使用HashMap<String, Object>来存储数据。

public class SearchScreenConfigModel extends DefaultDataModel implements Serializable{

private static final long serialVersionUID = 1L;

private ArrayList<DefaultGridColumnModel> defaultGridColumnModels;
private EntityTblModel entityTblModel;
private DefaultGridColumnModel defaultGridColumnModel;

public List<DefaultGridColumnModel> getDefaultGridColumnModels() {
    return get("defaultGridColumnModels");
}

public void setDefaultGridColumnModels(List<DefaultGridColumnModel> defaultGridColumnModels) {
    set("defaultGridColumnModels", defaultGridColumnModels);
}

public String getScreenName() {
    return get("screenName");
}

public void setScreenName(String value) {
    set("screenName", value);
}

public String getIcon() {
    return get("icon");
}

public void setIcon(String icon) {
    set("icon", icon);
}

public void setEntityTbl(EntityTblModel entityTbl) {
    set("entityTbl", entityTbl);
}

public EntityTblModel getEntityTbl() {
    return get("entityTbl");
}

}

public class DefaultDataModel implements DataModel, Serializable {

private static final long serialVersionUID = 1L;

private HashMap<String, Object> map;
protected boolean allowNetstedValues;

public DefaultDataModel(){

}

public DefaultDataModel(Map<String, Object> properties){
    super();
    setProperties(properties);
}


@SuppressWarnings("unchecked")
@Override
public <X> X get(String property) {
    if(map == null)
        return null;
    return (X)map.get(property);
}

@Override
public Map<String, Object> getProperties() {
    if(map != null)
        return map;
    return new HashMap<String, Object>();
}

@Override
public Collection<String> getPropertyNames() {
    Set<String> set = new HashSet<String>();
    if( map != null)
        set.addAll(map.keySet());
    return set;
}

@SuppressWarnings("unchecked")
@Override
public <X> X remove(String property) {
    if(map == null)
        return null;
    return (X) map.remove(property);
}

@SuppressWarnings("unchecked")
@Override
public <X> X set(String property, X value) {
    if(map == null)
        map = new HashMap<String, Object>();
    return (X)map.put(property, value);
}

public void setProperties(Map<String, Object> properties){
    for(String property : properties.keySet())
        set(property, properties.get(property));
}

}

我从服务器端设置数据(原始数据和用户定义的对象 - 可序列化)并发送回客户端。

在从服务器返回之前,地图上有数据。

在客户端收到模型后,hashmap为空。

任何人都可以帮帮我。

1 个答案:

答案 0 :(得分:1)

您无法使用Objecthttp://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes。这可能解释了为什么您不会在客户端获取数据。您需要将其重写为可以序列化所有子类型的类型。这也是Object的问题。 GWT为可序列化对象的所有子类型生成代码,因为在编译时它不知道在运行时使用哪个子类型。对于基本上意味着所有类的Object,这意味着可能永远不会使用的生成代码的巨大开销。