javascript - GWT 中带有 JavaScript 覆盖类型列表的 JsonUtils 异常

标签 javascript json gwt

我从 Servlet 获得了一个 JSON 字符串,我想使用 JavaScript 覆盖类型解析这个字符串。

我的整个编码都基于您发布的示例 google 我的目标是将 JSON 字符串加载到 Article 类型的 ArrayList 中。

所以我创建了类 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];     }-*/;
}

文章数据类

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"}]}

我总是得到这个异常(exception):

Caused by: com.google.gwt.core.client.JavaScriptException: (ReferenceError): JsonUtils is not defined at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:248) at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136) at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) at net.mybecks.gwt.client.XMLParser.getArticles(XMLParser.java) at net.mybecks.gwt.client.XMLParser.access$2(XMLParser.java:92) at net.mybecks.gwt.client.XMLParser$2.onSubmitComplete(XMLParser.java:78) at com.google.gwt.user.client.ui.FormPanel$SubmitCompleteEvent.dispatch(FormPanel.java:115) at com.google.gwt.user.client.ui.FormPanel$SubmitCompleteEvent.dispatch(FormPanel.java:1) at com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1)

第 92 行是上面的 getArticles 方法。

我严格遵循谷歌文档,在谷歌搜索异常时没有找到任何有用的结果。仅类文档。

BR & 谢谢, 迈贝克

最佳答案

为什么 getArticles() 是一个 JSNI 方法? JsonUtils 是一个普通的 GWT 类。

你的方法应该是:

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

关于javascript - GWT 中带有 JavaScript 覆盖类型列表的 JsonUtils 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9127219/

相关文章:

css - GWT 中的 float 面板

javascript - 更改文本区域模型后指令不会触发

javascript - 无法读取未定义的属性 'Materials'。使用嵌套对象响应 useState

java - Android 中的 JSON 解码

java - 使用发布参数数据从 gwt 项目重定向 URL

java - GWT 单例小部件在注入(inject)后从 DOM 中删除

javascript - 异步数组问题

javascript - ramda js 的多级分组

javascript - 如何将本地存储数据从一个页面持久化到另一个页面?

javascript - 访问 JSON 数组时出现问题