java - Java 中是否有 Nashorn 的 ScriptObjectMirror 的公共(public)和具体实例?

标签 java nashorn

我基本上想去:

ScriptObjectMirror myObj = new ConcreteScriptObjectMirror();

然后像这样调用一些JS,其中myObj是参数:

function myJSFunc(param) { 
    with(param) { 
        return paramProperty; 
    } 
} 

我现在正在这样做,但 Nashorn 正在提示:

TypeError: Cannot apply "with" to non script object

所以我传入的Java对象需要是ScriptObjectMirror的一个实例。

最佳答案

我遇到了同样的问题,以防万一您还没有找到答案。我认为以下代码片段可能包含您想要的内容。我正在使用 javax.script.SimpleBindings 将对象传递给 JavaScript 函数。

import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleBindings;

public class Demo {

    public static void main(String[] args) throws Exception {
        Demo demo = new Demo();
        String result = demo.execute();
        System.out.println("full name is " + result);
    }

    public String execute() throws ScriptException, NoSuchMethodException {
        final ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
        final Compilable compilable = (Compilable) engine;
        final Invocable invocable = (Invocable) engine;

        final String statement = "function fetch(values) { return values['first_name'] + ' ' + values['last_name']; };";
        final CompiledScript compiled = compilable.compile(statement);

        compiled.eval();

        SimpleBindings test = new SimpleBindings();
        test.put("first_name", "John");
        test.put("last_name", "Doe");

        FullName fullName = invocable.getInterface(FullName.class);
        return fullName.fetch(test);
    }

    public interface FullName {
      String fetch(SimpleBindings values);
    }
}

恕我直言,Nashorn 文档目前非常糟糕,所以我希望这可能有所帮助。

关于java - Java 中是否有 Nashorn 的 ScriptObjectMirror 的公共(public)和具体实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24691142/

相关文章:

java - : "jarsigner: attempt to rename {file} to {file}.org failed" when signing jars with ant?失败是什么原因

java - JsonArray 输出不起作用

java - 如何将 JavaScript 字符串而不是 Java 字符串传递给 Nashorn 引擎?

java - 构建大型 js 对象(字符串)时出现 Nashorn OutOfMemoryError

java - 人口变得陈旧 - 遗传算法

java - Android Studio : The application installed from Run 'app' and application installed from build/outputs/apk/debug/app-debug. apk 不同

java - 让 Nashorn 运行用户代码

java - 使用 Keycloak Script Mapper 聚合声明中角色的属性

java - 使用 Nashorn 时卸载大量 LambdaForm 类

java - 排序 ObservableList 理解比较器和谓词