Исключение JsonUtils со списком типов наложений JavaScript в GWT - PullRequest
1 голос
/ 03 февраля 2012

Я получаю строку JSON от сервлета и хочу проанализировать эту строку с помощью типов наложения JavaScript.

Вся моя кодировка ориентирована на ваши примеры, опубликованные google Моя цель - загрузить строку JSON в ArrayList типа Article.

Итак, я создал класс JSArray

public class JsArray<E extends JavaScriptObject> extends JavaScriptObject {
    protected JsArray() { }
    public final native int length() /*-{ return this.length; }-*/;
    public final native E get(int i) /*-{ return this[i];     }-*/;
}

Класс ArticleData

public class ArticleData extends JavaScriptObject {
    protected ArticleData() {}

    public final native String getId() /*-{ return this.id; }-*/;
    public final native String getAmount() /*-{ return this.amount; }-*/;
    public final native String getPct() /*-{ return this.pct; }-*/;
    public final native String getStartAmount() /*-{ return this.startamount; }-*/;
    public final native String getPrice() /*-{ return this.price; }-*/;
    public final native String getStockValue() /*-{ return this.stockvalue; }-*/;
}

И в моем EntryPoint я оба класса следующим образом:

String json = event.getResults();
logger.info(json);

JsArray<ArticleData> cs = getArticles(json);
for (int i = 0, n = cs.length(); i < n; ++i) {
    Window.alert(cs.get(i).getId() + " " + cs.get(i).getPrice());
}

...
private native JsArray<ArticleData> getArticles(String json)/*-{
   return JsonUtils.safeEval(json);
}-*/;

Мой файл JSON:

{"articles":[
{"amount":"50","id":"1","pct":"50,00","price":"162,37","startamount":"100","stockvalue":"8118,45"},{"amount":"20","id":"2","pct":"20,00","price":"164,83","startamount":"100","stockvalue":"3296,60"},{"amount":"20","id":"3","pct":"20,00","price":"170,40","startamount":"100","stockvalue":"3408,00"},{"amount":"100","id":"4","pct":"100,00","price":"41,32","startamount":"100","stockvalue":"4132,43"},{"amount":"0","id":"5","pct":"0,00","price":"40,04","startamount":"100","stockvalue":"0,00"}]}

Я всегда получаю это исключение:

Причина: com.google.gwt.core.client.JavaScriptException: (ReferenceError): JsonUtils не определен в com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript (BrowserChannelServer.java:248) на com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke (ModuleSpaceOOPHM.java:136) на com.google.gwt.dev.shell.ModuleSpace.invoke.Java: 561) на com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject (ModuleSpace.java:269) на com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject (JavaScriptHost.java:91) на net.mybecks.gwt.client.XMLParser.getArticles (XMLParser.java) at net.mybecks.gwt.client.XMLParser.access $ 2 (XMLParser.java:92) в net.mybecks.gwt.client.XMLParser $ 2.onSubmitComplete (XMLParser.java:78) на com.google.gwt.user.client.ui.FormPanel $ SubmitCompleteEvent.dispatch (FormPanel.java:115) на com.google.gwt.user.client.ui.FormPanel $ SubmitCompleteEvent.dispatch (FormPanel.java:1) на com.google.gwt.event.shared..GwtEvent.dispatch (GwtEvent.java:1)

Строка 92 - это приведенный выше метод getArticles.

Я строго следую документации Google и не нахожу никакой полезнойВ результате Google исключение.Только классная документация.

BR & Спасибо, mybecks

Ответы [ 2 ]

4 голосов
/ 03 февраля 2012

Почему getArticles() метод JSNI?JsonUtils это обычный класс GWT.

Ваш метод должен быть:

private JsArray<ArticleData> getArticles(String json) {
   return JsonUtils.safeEval(json);
};
1 голос
/ 04 февраля 2012

Я не защищаю этот подход, Strelok, безусловно, лучше, но ваша проблема возникла из-за того, что я не ссылался на JsonUtils явно.

private native JsArray<ArticleData> getArticles(String json)/*-{
    return @com.google.gwt.core.client.JsonUtils::safeEval(Ljava/lang/String;)(json);
}-*/

См. Вызов метода Java из рукописного JavaScript

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