2012-09-23 117 views
0

在我的GWT应用程序中,我有一个javascript函数,它需要一个数组作为参数。我使用RPC获取数据,因此我从我的数据库中获取了一个List < List>。我需要这个,因为我必须填充一种树形视图。例如,我从我的RPC调用中得到这个:{“A”,“A1”,“A2”},{“B”,“B1”},我必须将它传递给我的javascript函数:[[“A “,”A1“,”A2“],[”B“,”B1“]]。在我的界面中,我想显示:GWT,将ArrayList传递给JSNI

A+ 
    A1 
    A2 
B+ 
    B1 

如何使用JSNI将它传递给我的JavaScript函数?

+0

为什么你需要JSNI?你不能在GWT中完成吗? –

+0

是的,我认为我们可以在GWT中完成,但我们必须使用该javascript函数。 –

回答

3

如果您可以没有DevMode(因为您使用SuperDevMode),Java数组与生产模式下的JsArray*相同,因此String[][]JsArray<JsArrayString>相同。
在DevMode中,有JsArrayUtils可以帮助(在DevMode中创建副本,在生产模式下按原样返回,不带任何开销),但不适用于嵌套数组(实际上甚至不适用于字符串数组)案件。

如果您需要/想要列表而不是阵列或DevMode支持,那么您必须将数据复制到JsArray<JsArrayString>

如果可以使用阵列但需要DevMode的支持,可以使用GWT.isScript()使一个特定的代码分支:进行复印成DevMode的一个JsArray<JsArrayString>,传递数组原样在PROD模式(这也意味着2种JSNI方法,对于JsArray<JsArrayString>String[][]

+0

你知道类型签名是怎么样的吗? 'Lcom/google/gwt/core/client/JsArrayNumber;'是'JsArrayNumber',但是如何编写'JsArray '? – displayname

+1

因为Java泛型通过类型擦除工作,泛型类型参数不被编码。 –

+0

谢谢,我知道了,然后过夜[这里](http://stackoverflow.com/questions/16701465/jsni-jsarrayjsarraynumber-type-signature?noredirect=1#comment24042845_16701465)。 :) – displayname