GWT原生到长转换

GWT native to long conversion

我正在尝试将 js 原生数字转换为 GWT Long 并通过 gwt-rpc 发送。 但是我得到了非常奇怪的结果..

public class gwtbugEntryPoint implements EntryPoint {
  @Override
  public void onModuleLoad() {
    String data = "{\"type\":\"upd\", \"id\":123}";
    ServerEvent serverEvent = JsonUtils.<ServerEvent>safeEval(data);
    RootPanel.get().add(new HTML("GWT id="+serverEvent.getId()));
  }

}
class ServerEvent extends JavaScriptObject {
    protected ServerEvent() {
    }

public final native String getType()/*-{ return this.type; }-*/;

public final Long getId(){
    String idStr = _getId();
    GWT.log("idSTr:" + idStr);
    Long id = new Long(idStr);
    GWT.log("id:"+id);
    return id;
}

public final native String  _getId()/*-{ return this.id; }-*/;
}

控制台输出:

idSTr:123

id:0

谁能解释一下,这是怎么发生的?

此处没有关于您正在使用的 JavaScriptObject 的信息。 您是说 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number 吗?

您要查询的 'id' 字段是什么?

Chrome 控制台中的快速测试告诉我,您可能希望使用以下方法将 Number 的值获取为字符串:

var d = new Number(100)
> undefined
d.toString()
> "100"

如果您使用的是其他类型的 js "native" 号码,请提供更多详细信息。

问题出在将 js 原生数字转换为 long。 避免将js数字转换为long或使用字符串的最佳选择。

这里是这个案例的解决方法:

public final native String  _getId()/*-{ return ''+this.id; }-*/;

您不应将 long 与 JavaScript 一起使用,如下所述:http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#important

基本上,最简单的方法就是使用double