2011-06-20 2 views
1

J'ai été les bases de Google Codeing (http://code.google.com/intl/de-DE/webtoolkit/doc/latest/DevGuideCodingBasicsOverlay.html#example-collections) et j'ai pensé: Hé, cela pourrait être beaucoup plus rapide et plus facile à utiliser que de pharger mon objet JSON à la main. J'ai donc joué avec l'exemple et j'ai remarqué que ça fonctionnait bien quand JsArray a été défini dans le fichier HTML mais je n'ai pas trouvé de solution pour passer une String ou Url dans la fonction et ça me renvoie un Overlay Type.GWT - Types de superposition JavaScript et JSON

donc ce que je veux faire est:

J'ai cette fonction

private native Customer getFirstCustomer(/*TYPE (preferd String)*/ name) /*-{ 
    return (CASTVALUE TO ???) name; 
}-*/; 

Pour que je passe

{"FirstName": "Jimmy"} 

comme corde, et il me retourne un objet Java comme celui-ci :

import com.google.gwt.core.client.JavaScriptObject; 
    class Customer extends JavaScriptObject { 
     protected Customer() { } 
     public final native String getFirstName() /*-{ return this.FirstName; }-*/; 
    } 

Est-ce possible?

Meilleures salutations, Stefan

Répondre

6

S'il vous plaît, ne sont pas, par tout moyen, eval() choses aveuglément! (sécurité 101)

Utilisez JsonUtils de GWT à la place: il va utiliser le support JSON natif dans les navigateurs qui le supportent (plus rapide et plus sûr que eval()) et validera la JSON avant eval() qu'il ing dans d'autres (qui est, IE6, IE7 et vieux Safaris -pre 4.0.3-, toutes les autres versions de navigateur sans JSON natif sont morts maintenant):

Customer customer = JsonUtils.safeEval(jsonString); 
+0

Je vais ajouter le JsonUtils à mon poste :) (Je n'ai pas inclus d'avertissement de sécurité dedans ... j'ai supposé que la chaîne JSON était contrôlée à l'avance) – helios

1

Si vous avez une chaîne JSON, afin de créer l'objet javscript, you must eval it:

private native Customer getFirstCustomer(String jsonString) /*-{ 
    return eval(jsonString); 
}-*/; 

Si votre méthode native retourne votre classe client (il doit Prolonge JavaScriptObject) il sera lancé automatiquement (le compilateur Java l'acceptera, dans JS il n'aura pas besoin d'être casté).

Voir aussi this reference.

mise à jour de sécurité Important:

Merci à Thomas Broyer

Ne pas utiliser directement eval. Utilisez JsonUtils.safeEval(String) (API). Cela évitera d'exécuter du code javascript dangereux qui pourrait entrer dans la chaîne.

private native Customer getFirstCustomer(String jsonString) /*-{ 
    return JsonUtils.safeEval(jsonString); 
}-*/; 
+1

wow, ceci simple, je l'aime :). – Stefan

+0

Ouais. GWT est comme ça. – helios

+0

merci, dans ce cas, il faut aller à Thomas .... Je me demandais à ce sujet la nuit aussi ...... – Stefan