如何从javascript调用java方法

时间:2011-01-28 14:33:54

标签: java javascript rhino

如标题所述,我想要实现的目标如下:

  1. 创建java对象
  2. 将其传递给JavaScript
  3. 在传递的对象上调用方法(例如setter)
  4. 继续使用java中的对象
  5. 我正在使用java中包含的脚本。 如果有人可以帮助我,我会很高兴。

1 个答案:

答案 0 :(得分:5)

如果您正在使用ScriptEngine框架,这非常简单。您可以通过两种方式将Java对象“传递”到JavaScript:

  1. 您可以“种子”JavaScript代码的执行环境,并安排Java对象只在全局命名空间中“存在”
  2. 您可以将Java对象作为参数传递给JavaScript函数。
  3. 您还可以从JavaScript访问Java构造函数,并根据需要实例化Java对象。

    要做第一件事,您必须为脚本引擎设置“绑定”。它就像一张地图:

    final Bindings globals = engine.createBindings();
    globals.put("foo", yourObject);
    

    现在,当JavaScript代码在该引擎中运行时,全局符号“foo”将用作对Java对象的引用。您可以根据需要绑定任意数量的引用。

    如果要将Java对象作为参数传递给JavaScript函数,首先需要的是调用 JavaScript函数的方法。为此,您使用“Invocable”接口公开的“invokeFunction”或“invokeMethod”方法:

    final Object result = ((Invocable) engine).invokeMethod(context, methodName, arg, arg, ... );
    

    “context”只是对你想要this在被调用的函数中引用的东西的引用。 “methodName”只是一个字符串,给出了全局JavaScript函数的名称。

    JavaScript环境可通过其完全限定的路径名​​使用Java类:

    var javaHashMap = new java.util.HashMap();
    

    这会给你一个Java HashMap实例作为JavaScript变量。