Wie kann ich pass eine javaScript-Funktion, um eine Java-Methode als callback (Rhino)
Grundsätzlich bin ich versucht, übergeben Sie eine javaScript-Funktion, um eine Java-Methode als callback an das Skript.
Kann ich es nicht - irgendwie - aber der Gegenstand den ich erhalten ist eine Sonne.org.mozilla.javascript.intern.InterpretedFunction und ich sehe nicht einen Weg, um es aufzurufen.
Irgendwelche Ideen?
Hier ist, was ich habe, so weit:
var someNumber = 0;
function start() {
//log is just an log4j instance added to the Bindings
log.info("started....");
someNumber = 20;
//Test is a unit test object with this method on it (taking Object as a param).
test.callFromRhino(junk);
}
function junk() {
log.info("called back " + someNumber);
}
- Dies ist ein applet? Wenn nicht, es ist unmöglich, da der JavaScript-code ausgeführt wird client-Seite, während der Java-Code ausgeführt wird server-Seite. Sie sind Laufzeit-Variablen sind verloren in diesem Prozess. Sie müssen aufrufen, die Java über eine
POST
oderGET
verlangen, die Weitergabe Ihrer Daten als Anfrage-parameter. - Rhino ist eine JavaScript-interpreter in Java geschrieben (es ist Bestandteil der Java 6 JVM, die als Teil der script-API).
- Die OP war nicht ab, die Laufzeit, den er versuchte zu rufen, die Rhino - /JavaScript-Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Schnittstelle implementieren:
print
)Runnable
hier) und ruft die Java-Methode, die wiederum ruft die Skript-Schnittstelle implementiert.sun.org.mozilla.javascript.internal.InterpretedFunction
implementiert die Schnittstellesun.org.mozilla.javascript.Function
. Diese Schnittstelle hat eine Methode namenscall
nimmt:Context
Scriptable
zu verwenden, da der UmfangScriptable
zu verwenden, da der Wert vonthis
innerhalb der FunktionObjects
dass sind die Argumente für die FunktionAlso, was ich vorschlagen, ist, dass in java umgewandelt Sie das Objekt, das Sie übergeben wurden, als
sun.org.mozilla.javascript.Function
- und call -call
. Die ersten beiden Gründe kann alles sein, was Sie aus java starten, das script in den ersten Platz. Die Weise, die Sie verwenden, werden die letzten zwei Argumente könnennull
undnew Object[0]
.org.mozilla.javascript.Function
- So nannte alle Schnittstellen in der version, die Sie versenden in Ihre JDK.Die Lösung ist eigentlich, um es aufzurufen, die in einem anderen script. Diese Art der arbeiten:
Wenn du wieder die Referenz auf eine Funktion, die Sie brauchen, zu bitten, den Motor zu führen, dass Funktion für Sie. Und zwar nicht hübsch, zu Fragen, js eval() es für Sie mit einem bestimmten Satz von Bindungen tatsächlich die Arbeit für Sie erledigen. Sie müssen darauf achten, dass die Variablen, die man manipulieren gehören zu den rechten Bereich, ich denke, es ist einfach, Fehler zu machen hier.
Diesem Beispiel umfasst die Implementierung der java-Schnittstelle mit javascript. Das kann auch verwendet werden, für den Aufruf von javascript-Rückrufe von java.