GWT - JavaScript重叠类型和JSON

时间:2011-06-20 14:46:59

标签: gwt types overlay

我是Google Codeing Basics(http://code.google.com/intl/de-DE/webtoolkit/doc/latest/DevGuideCodingBasicsOverlay.html#example-collections),并认为:嘿,这可能会更快,比手动扫描我的JSON对象更容易使用。

所以我玩了这个例子并注意到它在HTML文件中定义JsArray时工作正常,但我找不到将String或Url传递给函数的解决方案,它返回给我一个Overlay Type。 / p>

所以我想做的是:

我有这个功能

    private native Customer getFirstCustomer(/*TYPE (preferd String)*/ name) /*-{
    return (CASTVALUE TO ???) name; 
}-*/;

我传递给谁

{"FirstName": "Jimmy"}

as String,它返回一个像这样的Java对象:

    import com.google.gwt.core.client.JavaScriptObject;
    class Customer extends JavaScriptObject {
      protected Customer() { }
      public final native String getFirstName() /*-{ return this.FirstName; }-*/;
    }

这可能吗?

祝你好运, 斯蒂芬

2 个答案:

答案 0 :(得分:6)

请不要盲目地eval()事情!(安全101)

使用GWT JsonUtils代替:它将在支持它的浏览器中使用原生JSON支持(比eval()更快更安全)并在eval()之前验证JSON。 (即IE6,IE7和旧的Safaris -pre 4.0.3-,所有其他没有原生JSON的浏览器版本现在已经死了):

Customer customer = JsonUtils.safeEval(jsonString);

答案 1 :(得分:1)

如果你有一个JSON字符串,为了创建javscript对象,you must eval it

private native Customer getFirstCustomer(String jsonString) /*-{
    return eval(jsonString);
}-*/;

如果您的本机方法返回您的Customer类(它必须扩展JavaScriptObject),它将自动转换(Java编译器将接受它,在JS中它不需要转换)。

另见this reference

重要的安全更新:

感谢Thomas Broyer

请勿直接使用eval。使用JsonUtils.safeEval(String)API)。它将避免执行可能出现在字符串中的不安全的javascript代码。

private native Customer getFirstCustomer(String jsonString) /*-{
    return JsonUtils.safeEval(jsonString);
}-*/;