本文介绍了GWT:如何在Java数组传递到JavaScript的本地方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有字符串的Java数组,现在我想将其传递到一个JSNI功能。我尝试GWT使用 JsArrayString ,但是我发现它不能直接初始化,因为它没有一个明显的构造函数。所以,我怎么能够通过我的字符串数组到JSNI功能,并在我的javascript code使用它呢?在code是看起来像如下:

 公共无效callJSNI(){
    的String []字符串数组= XXX;    //我应该如何数组转换成JSNI可读的格式在这里?
}私人本地无效JSNIMethod(JsArrayString阵列)/ * - {
    //一些code在JavaScript中使用数组
} - * /


解决方案

并没有提供一种简单的方法来做到这一点的API,你必须创建一个工具方法,将:


  1. 创建一个新的JSNI阵列

  2. 遍历Java数组的参数和填充JSNI阵列

事情是这样的:

公共静态JsArrayString toJsArray(字符串[]输入){
    JsArrayString jsArrayString = createEmptyJsArrayString();
    对于(一个String:输入){
        jsArrayString.push(多个);
    }
    返回jsArrayString;
}私有静态本地JsArrayString createEmptyJsArrayString()/ * - {
    返回[];
} - * /;

由于OP的建议,我们当然可以,跳过本地初始化和使用 JsArrayString.createArray()

现在,我们可以摆脱本土初始化,所以我们的code减小到这一点:

公共静态JsArrayString toJsArray(字符串[]输入){
JsArrayString jsArrayString = JsArrayString.createArray()CAST()。
    对于(一个String:输入){
        jsArrayString.push(多个);
    }
    返回jsArrayString;
}

I have a java array of String, and now I want to pass it into a JSNI function. I try to use JsArrayString in GWT, however I find that it can not be initialized directly, because it doesn't have a visible constructor. So how can I pass my String array into the JSNI function and use it in my javascript code? The code is looks like follows:

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
}-*/
解决方案

The API does not provide an easy way to do it, you'd have to create a utility method that will:

  1. Create a new JSNI array
  2. Iterate over the Java array's arguments and populate the JSNI array

Something like this:

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

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

As the OP suggested, we can, of course, skip the native initialization and use JsArrayString.createArray().

Now we can get rid of the native initialization, so our code reduces to this:

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

这篇关于GWT:如何在Java数组传递到JavaScript的本地方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-18 06:26