2016-03-28 1 views
2

Я пишу API, который будет использоваться некоторым кодом JavaScript. Некоторые из методов в этом API должны возвращать реальный массив JavaScript. К сожалению, это не работает:Как я могу вернуть реальный массив JavaScript из Java-метода с помощью Nashorn?

// MyApi.java 
public class MyApi { 
    String[] returnsJavaArray(); 

    List<String> returnsJavaList(); 
} 

// MyScript.js 
var api = getMyApi(); 
var strings = api.returnsJavaArray(); // Returns some kind of proxy 
strings = api.returnsJavaList(); // Also a proxy 

В то время как прокси-серверы поддерживают основные вещи, как strings[i], мне нужно, чтобы они были фактические массивы, чтобы использовать некоторый массив polyfills. Каков наилучший способ сделать это в Нашорне?

Моя единственная идея - написать обертку JavaScript всего MyApi и обернуть результаты Java.from(api.returnsJavaArray()), но это довольно утомительно.

ответ

-1

Вы должны заставить вас API возвращать строку js. Затем в файле JS, вы можете вызвать

eval(stringOfJsReturnFromServer); 

Для того, чтобы ваш скрипт запустить

+0

см это: http://www.w3schools.com/jsref/jsref_eval.asp – VinhNT

+0

от сервера? Нет отношений между сервером и клиентом, это Nashorn, запускающий JS-код непосредственно в JVM. –