Jdk nashorn api ScriptEngine 返回未定义
Jdk nashorn api ScriptEngine returning undefined
我正在尝试 运行 使用 jdk nashorn 脚本引擎的简单 javascript 函数。为了简单起见,我将传递的变量之一返回给函数,以检查 nashorn api 是否正常工作。在脚本引擎 运行s 函数之后我得到未定义的结果。
import jdk.nashorn.api.scripting.ScriptObjectMirror;
import javax.script.ScriptException;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
public class JDKNashornScriptRunner {
protected static final ScriptEngine scriptEngine = new NashornScriptEngineFactory().getScriptEngine();
protected final Bindings bindings;
public JDKNashornScriptRunner(String script)
{
bindings = scriptEngine.createBindings();
try
{
scriptEngine.eval(script, bindings);
}
catch( ScriptException e )
{
throw new RuntimeException("Exception while compiling script", e);
}
}
public Object runScript( String v1, String v2, String v3, String v4)
throws NoSuchMethodException, ScriptException
{
bindings.clear();
bindings.put("v1", v1);
bindings.put("v2", v2);
bindings.put("v3", v3);
bindings.put("v4", v4);
return ((ScriptObjectMirror) bindings.get("myFunction")).call(null);
}
}
主程序在这里-
public class RunMyFunctionScript {
public static void main(String args[])
{
String runScript = "function myFunction(v1, v2, v3, v4) {return v3;}";
JDKNashornScriptRunner scriptRunner = new JDKNashornScriptRunner(runScript);
Object result = scriptRunner.runScript("a","b","c","d"); //Here I am getting undefined as value
String v3Value = String.valueOf(result);
System.out.println(v3Value);
}
}
所以这里的问题是当 scriptEngine 试图 运行 使用下面给定行的脚本时,我变得不确定(它应该给我 c 作为值)
((ScriptObjectMirror) bindings.get("myFunction")).call(null);
因为您没有向 JavaScript 函数传递任何参数。 runScript
应该是:
public Object runScript( String v1, String v2, String v3, String v4)
throws NoSuchMethodException, ScriptException
{
return ((JSObject) bindings.get("myFunction")).call(null, v1, v2, v3, v4);
}
我正在尝试 运行 使用 jdk nashorn 脚本引擎的简单 javascript 函数。为了简单起见,我将传递的变量之一返回给函数,以检查 nashorn api 是否正常工作。在脚本引擎 运行s 函数之后我得到未定义的结果。
import jdk.nashorn.api.scripting.ScriptObjectMirror;
import javax.script.ScriptException;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
public class JDKNashornScriptRunner {
protected static final ScriptEngine scriptEngine = new NashornScriptEngineFactory().getScriptEngine();
protected final Bindings bindings;
public JDKNashornScriptRunner(String script)
{
bindings = scriptEngine.createBindings();
try
{
scriptEngine.eval(script, bindings);
}
catch( ScriptException e )
{
throw new RuntimeException("Exception while compiling script", e);
}
}
public Object runScript( String v1, String v2, String v3, String v4)
throws NoSuchMethodException, ScriptException
{
bindings.clear();
bindings.put("v1", v1);
bindings.put("v2", v2);
bindings.put("v3", v3);
bindings.put("v4", v4);
return ((ScriptObjectMirror) bindings.get("myFunction")).call(null);
}
}
主程序在这里-
public class RunMyFunctionScript {
public static void main(String args[])
{
String runScript = "function myFunction(v1, v2, v3, v4) {return v3;}";
JDKNashornScriptRunner scriptRunner = new JDKNashornScriptRunner(runScript);
Object result = scriptRunner.runScript("a","b","c","d"); //Here I am getting undefined as value
String v3Value = String.valueOf(result);
System.out.println(v3Value);
}
}
所以这里的问题是当 scriptEngine 试图 运行 使用下面给定行的脚本时,我变得不确定(它应该给我 c 作为值)
((ScriptObjectMirror) bindings.get("myFunction")).call(null);
因为您没有向 JavaScript 函数传递任何参数。 runScript
应该是:
public Object runScript( String v1, String v2, String v3, String v4)
throws NoSuchMethodException, ScriptException
{
return ((JSObject) bindings.get("myFunction")).call(null, v1, v2, v3, v4);
}