2015-07-31 3 views
2

Я пытаюсь преобразовать собственный номер js в GWT Long и отправить его по gwt-rpc. Но я получил очень странные результаты ..GWT native to long conversion

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

Может кто-нибудь объяснить мне, как это могло произойти?

ответ

1

Проблема заключалась в преобразовании js native numeric в long. Лучший вариант, чтобы избежать преобразования чисел js в длинные или использовать строки.

Вот исправление для данного случая:

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

Информация отсутствует здесь, в JavaScriptObject, который вы используете. Возможно, вы имели в виду https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number?

Что это за поле 'id', которое вы запрашиваете?

Быстрый тест в консоли Chrome показывает мне, что вы хотели бы использовать следующее, чтобы получить числовое значение в виде строки:

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

Если вы используете другой вид Дж.С. «родной» номер, просьба представить более Детали.

+0

Спасибо за ответ. Я обновил источник. Я пытаюсь использовать разобранный json. – nprokofiev