我有一个自定义模型,它在内部使用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为空。
任何人都可以帮帮我。
答案 0 :(得分:1)
您无法使用Object
:http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes。这可能解释了为什么您不会在客户端获取数据。您需要将其重写为可以序列化所有子类型的类型。这也是Object的问题。 GWT为可序列化对象的所有子类型生成代码,因为在编译时它不知道在运行时使用哪个子类型。对于基本上意味着所有类的Object,这意味着可能永远不会使用的生成代码的巨大开销。