Доступ к java-картам и спискам как к объектам JavaScript в Rhino - PullRequest
6 голосов
/ 18 мая 2011

Есть ли способ получить доступ к Java-картам и спискам как объектам JavaScript в Rhino?

У меня есть карта, которая содержит только другие карты и списки примитивов и строк, я хотел бы передать это скрипту Rhino и сделать что-то с ним, и вернуть измененный объект обратно в Java - но так как они Объекты java.util.Map и java.util.List, я не могу использовать стандартный синтаксис ассоциативных массивов JavaScript. то есть: fooMap.get("keyName") будет работать, но fooMap.keyName и fooMap["keyName"] не будут.

Я не знаю, есть ли способ, специфичный для Rhino, сделать это, или есть какая-то утилита конвертации / приведения, которая поможет. Commons BeanUtils недостаточно, потому что для преобразования Map в bean-компонент (доступ к которому можно получить через синтаксис ассоциативного массива), сначала необходимо создать класс, который имеет все названные мутаторы / средства доступа. Я не буду знать структуру объекта во время выполнения.

Ответы [ 4 ]

3 голосов
/ 18 мая 2011

Посмотрите на RingoJS. Он имеет удобные обертки для списка и карты для Rhino, такие как this

1 голос
/ 29 сентября 2011

итераторы кажутся ключевыми!

если вы хотите перебрать все записи на карте, вы можете сделать следующее

JAVA

//pass  the map and map.keySet().iterator() to the javascript
Object wrappedParameterMap = Context.javaToJS(parameterMap, scope);
ScriptableObject.putProperty(scope, "parameterMap", wrappedParameterMap);
Object wrappedParameterNames = Context.javaToJS(parameterMap.keySet().iterator(), scope);
ScriptableObject.putProperty(scope, "parameterNames", wrappedParameterNames);

JAVASCRIPT

while(parameterNames.hasNext()) {
  key = parameterNames.next();
  value = parameterMap.get(key);
}
1 голос
/ 09 августа 2011

https://developer.mozilla.org/en/New_in_Rhino_1.7R3#JS.c2.a0Objects_implement_Java_collections утверждает, что объекты JS соотв.массивы теперь можно привести к Map соответственноList, но, похоже, это не сработает для вашего варианта использования.

0 голосов
/ 22 декабря 2011

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

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