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 (без аргументов или возвращаемых значений) и, возможно, многие другие интерфейсы с одним методом в качестве интерфейсов обратного вызова. Из того, что я предпринимаю, он попытается найти метод, который динамически соответствует списку аргументов.
Предположительно, вы можете использовать это для привязки функций к области видимости.