【问题标题】:Using external library with Nashorn Javascript Engine使用带有 Nashorn Javascript 引擎的外部库
【发布时间】:2015-05-18 17:30:23
【问题描述】:

我尝试将 Google Maps Api 与 Nashorn 一起使用。但是好像不识别api。

豆子

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

engine.eval(new FileReader(FacesContext.getCurrentInstance().getExternalContext().getResource("/resources/js/MapGoogle/functions.js").getFile()));

Invocable invocable = (Invocable) engine;

Object result = invocable.invokeFunction("myFunction","param1");

functions.js

var myFunction = function(param1) {

   var directionsService = new google.maps.DirectionsService();

   return "";
};

错误:

javax.el.ELException: javax.script.ScriptException: 
ReferenceError: "google" is not defined in <eval> at line number 9

如何添加这个库以便 Nashorn 可以使用 Google Maps Api?

【问题讨论】:

  • 评估该外部文件时是否遇到任何错误?
  • @Vivin Paliath,functions.js 绝对没有错误

标签: java javascript jsf nashorn


【解决方案1】:

我建议替换这一行:

var directionsService = new google.maps.DirectionsService();

下面一行:

var directionsService = new Packages.google.maps.DirectionsService();

由于类包既不是“com”、“org”或“java”,您需要添加“Packages”。作为 Nashorn 正确调用 java 库的前缀。

显然你需要将它放在你的类路径中......

【讨论】:

  • 我的解决方案只有在提到的 API 包含在 java 库中时才有效。显然,对于 Google Maps API,您需要包含此 js 脚本:https://maps.googleapis.com/maps/api/js 最后但并非最不重要的一点:您需要一个 API 密钥...
  • 在google api上快速反转后,似乎这只能在Web客户端中工作,而不是在Nashorn中。上述文件包括“window”(相当于全局命名空间)和“document”(DOM)。 Nashorn 中没有 DOM...
  • 也可以查看https://developers.google.com/api-client-library/java/apis/mapsengine/v1 以获得纯 Java 库。这有更多机会与 Nashorn 合作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 2019-01-22
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多