使用JSObject从Java调用Javascript函数

时间:2010-09-02 13:55:26

标签: java javascript javascript-framework

我只是尝试使用JSObject从Java调用Javascript函数。我需要Javascript函数来更新HTML文本字段。为此,我需要知道元素ID和值。

我试过这个,但它不起作用。尝试从Javascript访问时,传递的值为空。

所以我的问题是如何从Javascript访问这些值?我一定错过了什么。

如果我声明大小为1的对象它将起作用,但我需要在对象数组中传递2个值。

提前致谢。

//Java code
Object[] objects = new Object[2];
objects[0] = "elementId";
objects[1] = "elementValue";
window.call("updateElement",objects);

//Javascript code
function updateElement(array){
  alert(array[0]);
  alert(array[1]);
}

3 个答案:

答案 0 :(得分:1)

所以我注意到你在java中使用Object数组并传入字符串值。 你尝试过使用String数组吗?

String[] x = new String[2];
x[0] = "elementId";
x[1] = "elementValue";
window.call("updateElement", x);

尝试一下,看看是否有效。我的猜测是,javascript无法实现传递的对象数组是一个字符串数组。虽然我不是百分百肯定。

答案 1 :(得分:0)

调用的方式是传入函数参数的数组。这里只有一个参数(你的数组),所以你需要调用它:

//Java code
Object[][] objects = new Object[][1];
objects[0]=new Object[2];
objects[0][0] = "elementId";
objects[0][1] = "elementValue";
window.call("updateElement",objects);

答案 2 :(得分:0)

在您的示例中,您应该看到alert('e')alert('l')出现,因为您正在将两个参数传递给' updateElement'。您始终可以使用javascript中的arguments对象来检查您真正收到的内容。

我建议总是单独创建最后的参数列表并持续创建,因此您不会遇到此问题。它只是一个可怕的设计缺陷,他们没有在Java 5中将签名更新为JSObject.call(String, Object...),我们就不会那么头痛了。

更清洁的解决方案是:

// Java code
window.call("updateElement", new Object[] { "elementId", "elementValue" });

// Javascript code
function updateElement(elId, elVal){
    alert(elId);
    alert(elVal);
}

但如果你真的想坚持在JS中接收数组:

String[] arr = new String[] { "elementId", "elementValue" };
window.call("updateElement", new Object[] { arr });