问题描述
我有字符串的Java数组,现在我想将其传递到一个JSNI功能。我尝试GWT使用 JsArrayString
,但是我发现它不能直接初始化,因为它没有一个明显的构造函数。所以,我怎么能够通过我的字符串数组到JSNI功能,并在我的javascript code使用它呢?在code是看起来像如下:
公共无效callJSNI(){
的String []字符串数组= XXX; //我应该如何数组转换成JSNI可读的格式在这里?
}私人本地无效JSNIMethod(JsArrayString阵列)/ * - {
//一些code在JavaScript中使用数组
} - * /
并没有提供一种简单的方法来做到这一点的API,你必须创建一个工具方法,将:
- 创建一个新的JSNI阵列
- 遍历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:
- Create a new JSNI array
- 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的本地方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!