java - GWT:如何将 java 数组传递给 javascript native 方法?

标签 java javascript arrays gwt

我有一个 java 字符串数组,现在我想将它传递给一个 JSNI 函数。我尝试在 GWT 中使用 JsArrayString,但是我发现它不能直接初始化,因为它没有可见的构造函数。那么如何将我的 String 数组传递给 JSNI 函数并在我的 javascript 代码中使用它呢?代码如下所示:

public void callJSNI() {
    String[] stringArray = xxx;

    //How should I convert the array into a JSNI-readable format here?
}

private native void JSNIMethod(JsArrayString array) /*-{
    //some code to use the array in javascript
}-*/

最佳答案

API 没有提供简单的方法来做到这一点,您必须创建一个实用方法来:

  1. 创建一个新的 JSNI 数组
  2. 迭代 Java 数组的参数并填充 JSNI 数组

像这样:

public static JsArrayString toJsArray(String[] input) {
    JsArrayString jsArrayString = createEmptyJsArrayString();
    for (String s : input) {
        jsArrayString.push(s);
    }
    return jsArrayString; 
}

private static native JsArrayString createEmptyJsArrayString() /*-{
    return [];
}-*/;

正如 OP 所建议的,我们当然可以跳过 native 初始化并使用 JsArrayString.createArray()

现在我们可以摆脱原生初始化,所以我们的代码简化为:

public static JsArrayString toJsArray(String[] input) {
JsArrayString jsArrayString = JsArrayString.createArray().cast();
    for (String s : input) {
        jsArrayString.push(s);
    }
    return jsArrayString; 
}

关于java - GWT:如何将 java 数组传递给 javascript native 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22167486/

相关文章:

java - 如何编写路径以向上一级然后向下进入另一个目录

java - EJB 的命名异常

java - 线程 "main"java.util.ConcurrentModificationException 中的异常

java - SQL转义遵循什么规则?

java - 如何强制我在 Spring 中的所有页面使用 https 协议(protocol)

javascript - 如何测试命名窗口是否打开或被弹出窗口阻止程序阻止?

javascript - 使用 D3(在 Javascript 中)在 RECT 上实现 SVG mask ?

javascript - 单击播放后如何加载视频?

arrays - 在 Delphi 中传递类型数组的参数

c - EASY C Max Array Element 程序 -> CANNOT find/understand the error