Frage

Ich habe eine Methode JSNI bekam, die eine Java-Methode aufruft, die einen Hasmap als Eingabe. Ich habe versucht,

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

Ich bin nicht die richtige Art Signatur zu definieren, scheinen die Strings enthalten oder finden, wenn diese Nutzung noch erlaubt ist.

Da ich in gwt ich dies zu tun bin, obwohl es die Umsetzung von hashmap sein könnte und der alternative Ansatz, den ich allerdings habe nimmt ein String [] [] Array als Eingabe

Ich hatte gehofft, für somwthing wie

Handler @ com.mypackage :: myMethod ([[Ljava / lang / String;). (Arr);

Allerdings traf ich ein anderes Thema die richtige JNSI sntax für die zweite Dimension des Arrays zu finden

Ein eindimensionales Array dh. [Ljava/lang/String; ist in Ordnung, aber ich brauche die 2. Dimension.

Jede Hilfe / Ideen oder Links zu guten jnsi doc geschätzt.

War es hilfreich?

Lösung

Können Sie nach den Fehler, dass Ihr immer, und auch, welche Art von JavaScript-Objekt Ihr versucht, als hashmap zu passieren. Ich gehe davon aus Sie einen Kompilierung Fehler bekommen?

Hier ist ein guter Start für JSNI Dokumentation:

GWT JSNI doc

GWT Blog post auf JSNI

Andere Tipps

Ich glaube, Sie in Typ Löschung ausführen. Jeder generische Objektparameter ist wirklich nur java.lang.Object zur Laufzeit. Ich glaube nicht, Generika zu JNI ausgesetzt sind.

Ich habe JNI-Code geschrieben, aber nie generische Typen von nativen Code zu verwenden versuchte, so bin ich nicht sicher. Googeln hat keine spezifischen Hinweise oder Beispiele aufgedreht.

Siehe Java VM Typ Signaturen für einen Hinweis auf die Art Signaturen in JNI verwendet (und JSNI)

Sie können jedoch nicht ohnehin eine Java HashMap Javascript übergeben müssen. Stattdessen betrachten JSONObject und Leiten eines nativen JavaScript-Objekt zu Ihrem Javascript-Code. Es sieht wie folgt aus:

  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']);
  }-*/;

Diese grob kompiliert werden:

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

Ok, nachdem es bei der Suche ...

Ich war nicht in der Lage, alle Unterlagen oder Anordnung zu finden, die die mehrdimensionalen Array von Strings gibt. Schaffte es dies mit der HashMap getan, mit:

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

gearbeitet, wenn ich die Eingabe ohne die Definition der Typen definieren. Wie zum Beispiel:

HashMap myHashMap = new HashMap();

Das gibt den JSNI eine HashMap vom Typ <Object, Object>.

Ich bin Umgang mit dann das Objekt auf der anderen Seite durch den Inhalt des hashmap in Strings Gießen.

Danke für die Links rostig:

GWT JSNI doc - Das ist gut für das Erhalten der korrekten Formatierung von Primitiven

GWT Blog post auf JSNI - Habe diesen Blog nicht gesehen, bevor

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top