我是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; }-*/;
}
这可能吗?
祝你好运, 斯蒂芬
答案 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中它不需要转换)。
重要的安全更新:
感谢Thomas Broyer
请勿直接使用eval
。使用JsonUtils.safeEval(String)
(API)。它将避免执行可能出现在字符串中的不安全的javascript代码。
private native Customer getFirstCustomer(String jsonString) /*-{
return JsonUtils.safeEval(jsonString);
}-*/;