Question

J'ai une méthode JSNI qui appelle une méthode Java qui prend Hasmap en entrée. J'ai essayé

handler.@com.mypackage::myMethod(Ljava/util/Hashmap;)(myHashMap);
handler.@com.mypackage::myMethod(Ljava/util/Hashmap<Ljava/lang/String,Ljava/lang/String>;)(myHashMap);

Je n'arrive pas à définir le bon type de signature pour inclure les chaînes ou à rechercher si cet usage est même autorisé.

Depuis que je fais cela dans gwt, j’ai pensé que c’était peut-être l’implémentation de hashmap et l’approche alternative que je pensais prendre prend un tableau String [] [] en entrée

J'espérais quelque chose comme

gestionnaire. @ com.mypackage :: myMethod ([[Ljava / lang / String;) (myArray);

Cependant, je suis confronté à un autre problème de recherche de la syntaxe JNSI correcte pour la 2e dimension du tableau

.

Un tableau à une seule dimension, c'est-à-dire. [Ljava/lang/String; c'est bien, mais j'ai besoin de la 2e dimension.

Toute aide / idée ou lien vers un bon document Jnsi apprécié.

Était-ce utile?

La solution

Pouvez-vous signaler l’erreur que vous obtenez, ainsi que le type d’objet javascript que vous essayez de transmettre en tant que hashmap. Je suppose que vous obtenez une erreur de compilation?

Voici un bon début pour la documentation JSNI:

doc JSNI GWT

Message de blog GWT sur JSNI

Autres conseils

Je pense que vous rencontrez un problème d’effacement des caractères. Chaque paramètre d'objet générique est en réalité juste java.lang.Object au moment de l'exécution. Je ne crois pas que les génériques soient exposés à JNI.

J'ai écrit du code JNI mais je n'ai jamais essayé d'utiliser des types génériques à partir de code natif, alors je n'en suis pas certain. Google n'a pas trouvé de références ni d'exemples.

Voir Signatures de type de machine virtuelle Java pour une référence aux signatures de type utilisées dans JNI (et JSNI)

Cependant, vous n’avez peut-être pas besoin de passer un Java HashMap à Javascript. Au lieu de cela, envisagez d'utiliser JSONObject et de transmettre un objet JavaScript natif à votre code javascript. Cela ressemble à ceci:

  public void callFoo() {
    JSONObject obj = new JSONObject();
    obj.put("propertyName", new JSONString("properyValue"));
    JavaScriptObject jsObj = obj.getJavaScriptObject();

    nativeFoo(jsObj);
  }

  public native void nativeFoo(JavaScriptObject obj) /*-{
    $wnd.alert(obj['propertyName']);
  }-*/;

Ceci est compilé en gros:

var obj = {'propertyName': 'propertyValue'};
$wnd.alert(obj['propertyName']);

Ok, après l'avoir regardé ...

Je suis incapable de trouver une documentation ou un arrangement donnant un tableau multidimensionnel de chaînes. J'ai réussi à le faire en utilisant HashMap, en utilisant:

handler.@com.mypackage::myMethod(Ljava/util/Hashmap;)(myHashMap);

a fonctionné si je définis l'entrée sans définir les types. Tels que:

HashMap myHashMap = new HashMap();

Ceci donne au JSNI un HashMap de type <Object, Object>.

Je gère ensuite l'objet de l'autre côté en transformant le contenu de la table de hachage en chaînes.

Merci à rouillé pour les liens:

document JSNI GWT - C'est bon pour obtenir le formatage correct des primitives

Message de blog GWT sur JSNI - N'avait pas vu ce blog avant

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top