Java脚本中的JavaScript脚本中的绑定方法调用

时间:2012-06-20 18:53:44

标签: java javascript scripting

假设我有一个Javascript文件

function js_main(args){
     /* some code */
     var x = api_method1(some_argument);
     /* some code */
}

我尝试以javax.scripting通常的方式运行它

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
engine.eval(...);

现在,我想在Javascript中使用我的Java类处理api_method1的调用。我希望有一些映射/绑定调用,即每次脚本调用api_method1(arg)方法

public Object api_method1(Object arg){ ... }

(放置在与引擎相同的类中)将被调用。

我可以实现吗?

1 个答案:

答案 0 :(得分:15)

  1. 使用engine.createBindings()制作Bindings对象;
  2. 将一个对象暴露给具有某个名称的绑定:

    Bindings b = engine.createBindings();
    b.put("api", yourApiObject);
    engine.setBindings(b, ScriptContext.ENGINE_SCOPE);
    
  3. 然后在JavaScript中,您可以调用一个全局“api”对象:

    api.method1( "foo", 14, "whatever" );
    
  4. 该设施易于使用,但要小心你来回传递的东西;将JavaScript类型转换为Java类型并没有那么多。