Вызовите (Rhino) JS-функцию в Java и передайте переменную в - PullRequest
2 голосов
/ 06 августа 2010

После вчерашнего выяснения, как настроить мой проект Eclipse, чтобы он мог запускать код JS (если вы заинтересованы: Создание сервера JS внутри Java для Google AppEngine ), у меня возник следующий вопросэта тема: у меня есть файл JS и функция внутри него.Мне нужно запустить эту функцию внутри моего кода Java и передать в нее переменную (строку Java).Мой файл очень простой, в настоящее время он выглядит так:

public class Com_feedic_readabilityServlet extends HttpServlet {
 public void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws IOException {
  resp.setContentType("text/html"); 
  Context cx = ContextFactory.getGlobal().enterContext();
  cx.setOptimizationLevel(-1);
  cx.setLanguageVersion(Context.VERSION_1_5);
  Global global = Main.getGlobal();
  global.init(cx);
  Main.processSource(cx, "server_js/js_init.js");
 }
}

Теперь мне нужно вызвать функцию run() в файле js_init.js.Как мне это сделать?

Ответы [ 2 ]

7 голосов
/ 07 августа 2010

Вам необходимо передать значение параметра через объект Binding следующим образом:

  package rhinodemo;

  import java.util.Date;
  import javax.script.*;

  public class RhinoDemo {

    public static void main(String[] args) throws Exception {
      ScriptEngineManager mgr = new ScriptEngineManager();
      ScriptEngine engine = mgr.getEngineByName("JavaScript");

      Bindings bindings = engine.createBindings();
      bindings.put("currentTime", new Date());
      engine.eval(
         "function run(x) { println('x=' + x); }" +
         "run(currentTime);", bindings);
    }
  }

Если вы хотите, чтобы ваш Java-код вызывал функцию Javascript с именем run(), то создайте скрипт, который (а) определяет функцию run() и (б) вызывает эту функцию, передавая ей параметр.Затем на стороне Java вам нужно создать объект Bindings и установить значение этого параметра bindings.put(currentTime, new Date()).

2 голосов
/ 12 ноября 2010

попробуйте это:

Object jsOut = Context.javaToJS(System.out, scope);
ScriptableObject.putProperty(scope, "out", jsOut);

и файл js out.println(<text>);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...