我用下面的代碼與Rhino
JavaScript引擎中的Java:訪問可變
@Test
public void testRhino() throws ScriptException {
final ScriptEngineManager factory = new ScriptEngineManager();
final ScriptEngine engine = factory.getEngineByName("rhino");
final String raw = "I am the raw value injected";
final ScriptContext ctx = new SimpleScriptContext();
ctx.setAttribute("raw", raw, ScriptContext.ENGINE_SCOPE);
String script = "var result = 'I am a result';";
script += "java.lang.System.out.println(raw);";
script += "'I am a returned value';";
final Object res = engine.eval(script, ctx);
System.out.println(ctx.getAttribute("result"));
System.out.println(res);
}
腳本的輸出(使用Rhino
)是:
I am the raw value injected
I am a result
I am a returned value
內Nashorn
JavaScript引擎,我得到了result
沒有價值:
回報
I am the raw value injected
null
I am a returned value
如何訪問使用nashorn
發動機ScriptContext
的result
變量的值?
'NashornScriptEngine#createBindings()'返回無論是'新SimpleBindings()',如果全球每引擎設置,或'createGlobalMirror()'如果沒有設置。 '創建發動機之前;全球每engine',或添加行'System.setProperty(「nashorn.args」,「--global每次發動機」) - 與任一'-Dnashorn.args =運行,都會導致'ctx.getAttribute(「result」)'再次返回'null'。解決Nashorn的全球問題是將Nashorn嵌入到Java應用程序中的最大難題之一。 – AJNeufeld