2010-03-08 13 views
2

我從AMF的數據從Java到Flex(BlazeDS)Flex空整數

在java的side對象中有Integer字段。所以它可以是空的。

在Flex端對象是int。所以空值被反序列化爲0.

這不是我想要的,我想看看它是0還是null。

Flex中是否有類似於(Integer in Java)的包裝? 謝謝

回答

4

據我所知,沒有這樣的包裝。你可以寫一個分配NaN到內部int如果參數的構造函數是null

0

由於Amarghosh回答,有沒有這樣的包裝。作爲一種解決方法,我們檢查int值爲-1,它等於我們域中未分配的int值。

1

Amarghosh有正確的答案,但是當你繼續完成項目時,當你應用「一切都是一個字符串」規則時,你會發現在amf世界中生活更容易。從長遠來看,這個建議可能會有很大幫助。

祝你好運, 傑里米

+0

「一切都是字符串」,然後HTTP服務與XML將更乾淨的解決方案。如果一切都是字符串,爲什麼我會使用AMF? – javanes 2010-03-09 07:46:16

+0

即使通過amf序列化您的XML數據比httpservice調用+ xml快大約5倍(根據我們的測試)。而我們70%的用戶在美國,30%的用戶在德國,巴西和中國。我參與過的每個主要的flex項目都至少有一位架構師將最簡單的數據類型,特別是日期作爲字符串處理。大多數語言都存在actionscrip所具有的問題 - 您可以追蹤(8244.094488188976)並在控制檯中獲取其他編號。將該數字視爲字符串可以保證數據的完整性。 – 2010-03-09 16:41:45

+0

http://stackoverflow.com/questions/2100228/simple-calculation-problem-with-flex – 2010-03-09 16:42:30

3

我們通過創建覆蓋的setValue和getValue一個BeanProxy類解決了這個。在那裏,如果值是一個Number和null,那麼我們將NaN返回到Flex一側,如果它是Double和NaN,則返回null到Java端。工作完成:

 
@Override 
public void setValue(Object instance, String propertyName, Object value) { 
    if ((value instanceof Double)) { 
     Double doubleValue = (Double) value; 
     if (doubleValue != null && doubleValue.isNaN()) { 
      super.setValue(instance, propertyName, null); 
     } 
    }else{ 
      super.setValue(instance, propertyName, value); 
     } 
} 

@Override 
public Object getValue(Object obj, String propertyName) { 
    final Class classType = super.getType(obj, propertyName); 
    if (isNumber(classType) && super.getValue(obj, propertyName) == null) { 
     return Double.NaN; 
    } 
    return super.getValue(obj, propertyName); 
}