2012-09-23 115 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