【问题标题】:GWT, passing an ArrayList to JSNIGWT,将 ArrayList 传递给 JSNI
【发布时间】:2012-09-23 23:49:10
【问题描述】:

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

A+
  A1
  A2
B+
  B1

如何使用 JSNI 将其传递给我的 javascript 函数?

【问题讨论】:

  • 为什么需要 JSNI?你不能在 GWT 中做吗?
  • 是的,我认为我们可以在 GWT 中做到这一点,但我们必须使用那个 javascript 函数。

标签: gwt jsni


【解决方案1】:

如果您可以不使用 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[][])

【讨论】:

  • 你知道类型签名是什么样子的吗? Lcom/google/gwt/core/client/JsArrayNumber;JsArrayNumber 但如何写 JsArray<JsArrayNumber>
  • 因为 Java 泛型通过类型擦除工作,所以泛型类型参数没有被编码。
  • 谢谢,我一夜之间搞定了here。 :)
猜你喜欢
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
相关资源
最近更新 更多