2016-08-14 92 views
0

我很努力地從java中調用javascript函數。我的問題來自於一個事實,即整體功能實際上是收到一個字符串參數:從java中調用帶有參數的javascript函數

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

其中函數對象實際上是整個Java腳本方法。我需要用nashorn調用這個方法

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

我需要將map函數也傳遞給函數。當js函數修改地圖對象時,我必須用java打印出來。

我會appriciate任何幫助。

回答

1

您可以使用invokeFunction方法上Invocable的[https://docs.oracle.com/javase/8/docs/api/javax/script/Invocable.html#invokeFunction-java.lang.String-java.lang.Object...-]

犀牛引擎實現javax.script.Invocable接口。從你的「selectMethod」 Java方法,你可以這樣做:

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

我想通過腳本函數名稱是一個全球性的腳本函數[這是已經在引擎通過「EVAL」調用來完成早先定義]的。