2009-11-30 6 views
1

Dans GWT 1.7, j'ai une classe utilisée pour construire un objet côté serveur qui est ensuite utilisé côté client (navigateur).Classes GWT: une annotation pour empêcher la sérialisation d'un champ?

Côté client, je souhaite mettre en cache un service (dans ce cas NumberFormat). Ceci sera initialisé paresseusement dans une méthode client seulement, et stocké comme un objet de champ. Le problème est que les outils de construction Java (1.6) interprètent ce champ comme devant être sérialisé côté serveur (même s'il n'est jamais accessible sur le serveur).

Je pourrais envelopper l'objet dans un certain côté client, mais je préfère spécifier une annotation pour indiquer que le champ n'aura jamais besoin de sérialisation pour la transmission RPC.

public class myCrossDomainObject { 

    private int someSerializedField; 
    private string anotherSerializedField; 

    @SomeAnnotationIKnowNotWhat(..) 
    private NumberFormat numberFormatterDontSerializeMe; 

    // rest of class ...... 

} 
+1

Avez-vous essayé le marquer transitoire? – cletus

Répondre

6

Essayez

private transient NumberFormat numberFormatterDontSerializeMe; 
+0

+1 pour transitoire. Les champs statiques ne sont pas sérialisés non plus. – Bluu

0

@GwtTransient

Cette annotation signifie la même chose que le mot-clé transitoire, mais il est ignoré par tous les systèmes de sérialisation autres que GWT de. Généralement, le mot clé transitoire doit être utilisé de préférence à cette annotation. Cependant, pour les types utilisés avec des systèmes de sérialisation multiples, il peut être utile de .
Notez que GWT acceptera réellement toute annotation nommée GwtTransient à cette fin. Ceci est fait pour permettre aux bibliothèques de prendre en charge la sérialisation GWT sans créer de dépendance directe à la distribution GWT .

http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/client/rpc/GwtTransient.html