Я каким-то образом борюсь с массивами и JSNI в контексте Autobeans.
В одном из моих проектов GWT я извлекаю данные из серверной части с помощью JSON.
После того, как данные получены на клиенте, я хочу визуализировать их с помощью настраиваемые виджеты визуализации (разработанные на javascript).
Вот компоненты:
Структура JSON:
{'ids':[1,2,3,4],'data':[[1.0],[1.0,2.0],[1.0,2.0,3.0] ... ]}
В основном у меня есть два набора данных в моей полезной нагрузке json. id – это массив целых чисел (int[]
), а data – массив массивов с плавающей запятой (float[][]
).
Конечно, есть разные способы анализа данных на клиенте. Я решил использовать AutoBeans. Итак, я определил интерфейс для своей структуры json.
Автобин:
interface MyData {
List<Integer> ids;
List<List<Float>> data;
}
Парсинг данных работает нормально.
Мои пользовательские виджеты визуализации имеют функцию API для установки данных, которые выглядят следующим образом:
function api_setData(ids,data) {
//ids should be an Array of Ints
//data should be an array of array of Floats.
}
Проблема в том, что с JSNI я не могу использовать обычные массивы Java. Я должен использовать JsArray
.
public final native void setData(JsArrayInteger ids,JsArray<JsArrayInteger> data /*-{
this.api_setData(ids,data);
}-*/;
Поэтому мне нужно преобразовать свойства AutoBean (данные и id) в экземпляры JsArray. Есть ли лучший/приятный способ сделать это?
Или, может быть, я должен использовать JSONParser
вместо AutoBeans
Это более эффективно?