22

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(...);

api_method1ここで、Java クラスを使用して Javascript での呼び出しを処理したいと思います。api_method1(arg)スクリプトがメソッドを呼び出すたびに、ある種の呼び出しのマッピング/バインディングが必要です

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

(エンジンと同じクラスに配置) が呼び出されます。

これを達成できますか?

4

1 に答える 1

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" );
    

施設は使いやすいですが、行き来するものには注意してください。JavaScript の型を Java の型に変換することはそれほど多くありません。

于 2012-06-20T19:00:39.297 に答える