2011-10-10 12 views
0

私は内部でHashMap<String, Object>を使用してデータを保存するカスタムモデルを持っています。GWT - 応答でハッシュマップがnullですか?

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)); 
} 

}

Iは、サーバー側からのデータを設定しています(両方のプリミティブと同様に、ユーザー定義オブジェクト - シリアライズ)し、クライアントに送り返します。

サーバーから戻る前に、マップにデータがあります。

モデルがクライアント側で受信されると、ハッシュマップはnullになります。

誰かが私を助けてください。

+0

実際のコードスニペットなしでは伝えにくい。 – Saket

+0

コードスニペットを追加しました –

答えて

1

Objecthttp://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypesは使用できません。これはおそらく、クライアントでデータを取得しない理由を説明します。すべてのサブタイプを直列化できるタイプに書き直す必要があります。これはObjectでも問題です。 GWTは、コンパイル時に実行時に使用されるサブタイプがわからないため、直列化可能オブジェクトのすべてのサブタイプのコードを生成します。基本的にすべてのクラスを意味するObjectの場合、おそらく決して使用されない生成コードの巨大なオーバーヘッドを意味します。

関連する問題