2010-03-08 10 views
2

Je prends des données de Java à Flex par AMF (BlazeDS)Flex Null Entier

En java côté objet a un champ entier. Donc ça peut être nul.

En objet côté Flex est int. Les valeurs sont nulles Donc désérialisé comme 0.

Ce n'est pas ce que je veux, je veux voir si elle est 0 ou nul.

Y at-il wrapper comme (entier en Java) pour Flex? Merci

Répondre

4

Pour autant que je sache, il n'y a pas de papier d'emballage. Vous pouvez en écrire un qui attribue NaN à l'interne int si l'argument au constructeur est null

0

Comme Amarghosh a répondu, il n'y a pas de telle enveloppe. Pour contourner le problème, nous vérifions la valeur int pour -1, ce qui équivaut à une valeur int non affectée dans notre domaine.

1

Amarghosh a la bonne réponse, mais vous trouverez que vous continuez dans votre projet que la vie est beaucoup plus facile dans le monde amf lorsque vous appliquez la règle « tout est une chaîne ». Simplement une suggestion qui pourrait aider beaucoup à long terme.

Bonne chance, Jeremy

+0

"tout est chaîne", alors httpservice avec xml sera une solution plus propre. Pourquoi devrais-je utiliser AMF si tout est chaîne? – javanes

+0

Même la sérialisation de vos données xml via amf est environ 5 fois plus rapide (selon nos tests) que les appels httpservice + xml. Alors que 70% de nos utilisateurs sont aux États-Unis, 30% sont en Allemagne, au Brésil et en Chine. Chaque grand projet flexible dont j'ai fait partie a au moins un architecte qui traite les types de données les plus simples, en particulier les dates, comme des chaînes. La plupart des langues ont le problème que actionscrip a - où vous tracez (8244.094488188976) et obtenez un nombre différent dans votre console. Traiter ce nombre comme une chaîne garantit l'intégrité des données. –

+0

http://stackoverflow.com/questions/2100228/simple-calculation-problem-with-flex –

3

Nous avons résolu en créant une classe BeanProxy qui remplace setValue et getValue. Dans là, nous retournons NaN au côté flex si la valeur est un nombre et null, et nous retournons null au côté Java si c'est un double et NaN. Job done:

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