假设我有一个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){ ... }
(放置在与引擎相同的类中)将被调用。
我可以实现吗?
答案 0 :(得分:15)
engine.createBindings()
制作Bindings对象; 将一个对象暴露给具有某个名称的绑定:
Bindings b = engine.createBindings();
b.put("api", yourApiObject);
engine.setBindings(b, ScriptContext.ENGINE_SCOPE);
然后在JavaScript中,您可以调用一个全局“api”对象:
api.method1( "foo", 14, "whatever" );
该设施易于使用,但要小心你来回传递的东西;将JavaScript类型转换为Java类型并没有那么多。