2016-08-14 8 views
0

Ich habe Schwierigkeiten, JavaScript-Funktion von Java aufzurufen. Mein Problem kommt von der Tatsache, dass ganz Funktion tatsächlich als String-Argument empfangen wird:JavaScript-Funktion von Java mit Argumenten aufrufen

public void selectMethod(Map<T> item, String function) 

wo Funktionsobjekt ist eigentlich die ganze Java-Script-Methode. Ich muss diese Methode mit Nashorn anrufen

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); 

Ich muss die Funktion mit Karte Element auch übergeben. Wenn die js-Funktion das Map-Objekt ändert, muss ich es in Java ausdrucken.

Ich würde jede Hilfe schätzen.

Antwort

1

Sie können invokeFunction Methode auf aufrufbaren [https://docs.oracle.com/javase/8/docs/api/javax/script/Invocable.html#invokeFunction-java.lang.String-java.lang.Object...-]

Nashorn Engine implementiert javax.script.Invocable-Schnittstelle verwenden. Von Ihrer „select“ Java-Methode, könnten Sie so etwas wie:

((Invocable)engine).invokeFunction(function, item); 

gehe ich davon aus, den Namen Skript-Funktion übergeben ist, dass eine globalen Skriptfunktion [die bereits im Motor früher über „eval“ Anruf geleistete Arbeit wurde] .

Verwandte Themen