javax.script передает javascript метод Java для использования в качестве обратного вызова

Я использую javax.script для встраивания кода JavaScript в метод Java.

В моем проекте javascript заботится о том, чтобы отправлять асинхронный http-запрос через веб-сокет. Как только ответ получен, мне нужно выполнить функцию обратного вызова.

Я хотел бы вызвать метод, написанный на Java, в качестве обратного вызова.

В документации здесь: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/ объясняется, как реализовать методы java в javascript для интерфейса, но не как вызывать методы Java Форма JavaScript.

Спасибо

2 ответа

Не уверен, что это именно то, что вы ищете, но вот пример кода, который предоставляет обратный вызов java-объекта в некоторый код javascript, который затем будет вызывать этот обратный вызов позже:

public class JsCallback{
  public static void main(String[] args) throws Exception{

   ScriptEngineManager factory = new ScriptEngineManager();
   ScriptEngine engine = factory.getEngineByName("JavaScript");
   engine.put("cb", new JsCallback());
   engine.eval("println('Doing something in javascript here first');" +
     "cb.apply('bar');");
  }

  public void apply(String s){
    System.out.println("Back in java code here: " + s);
  }
}

Использовать Function в Java 8:

JS:

run = function(callback) {
  callback("foo");
}

Джава:

Function<String,String> fn = (arg) -> {
  return arg.toUpperCase();
};

// call run(fn)
invokeFunction("run", fn)

Вы также можете использовать Runnable (без аргументов или возвращаемых значений) и, возможно, многие другие интерфейсы с одним методом в качестве интерфейсов обратного вызова. Из того, что я предпринимаю, он попытается найти метод, который динамически соответствует списку аргументов.

Предположительно, вы можете использовать это для привязки функций к области видимости.

Другие вопросы по тегам