Buffalo不支持数组参数传递,还是我的写法有误

8 views
Skip to first unread message

acale...@gmail.com

unread,
Jul 18, 2008, 2:42:43 AM7/18/08
to buffalo与Amowa
Step 1 用JS获取一组CHECKBOX的数组:
----------------------------------------------------------------------------------------------------------------------------------------------
var selectedFiles = document.getElementsByName("fileIds");
for(var i =0 ; i < selectedFiles.length; i++){
if (selectedFiles[i].checked){
alert(selectedFiles[i].value); //值完全正确
}
}
----------------------------------------------------------------------------------------------------------------------------------------------
Step 2 将数组传递给JAVA服务:发生页面错误提示,实际上Call function失败,因为Step3 的Service工作正常,没有
Call到。
----------------------------------------------------------------------------------------------------------------------------------------------
buffalo.remoteCall("baseService.deleteBaseFile",[selectedFiles],
function(reply){
var k=reply.getResult();
});
----------------------------------------------------------------------------------------------------------------------------------------------
Step 3 JAVA服务代码:
----------------------------------------------------------------------------------------------------------------------------------------------
public int deleteBaseFile(String[] fileIds){
System.out.println("Here is deleteBaseFile function");
return baseDao.deleteBaseFile(fileIds);
}
----------------------------------------------------------------------------------------------------------------------------------------------

Michael Chen

unread,
Jul 18, 2008, 6:49:30 AM7/18/08
to am...@googlegroups.com
selectedFiles是一个对象,selected.value才是string值

2008/7/18 acale...@gmail.com <acale...@gmail.com>:

--
Michael Chen
--------------------------------
Blog: http://michael.nona.name
MSN: jzch...@hotmail.com

acale...@gmail.com

unread,
Jul 18, 2008, 8:30:54 PM7/18/08
to buffalo与Amowa
问题是如何把JS的数组对象(如例子中的selectedFiles)传递给JAVA方法中的数组对象?
例子中数组对象的值已经可以通过"alert(selectedFiles[i].value); //值完全正确 "验证说明取到了呵,只是传
给JAVA方法的时候,报错。

On Jul 18, 6:49 pm, "Michael Chen" <mechil...@gmail.com> wrote:
> selectedFiles是一个对象,selected.value才是string值
>
> 2008/7/18 acaleph2...@gmail.com <acaleph2...@gmail.com>:
> MSN: jzche...@hotmail.com

Michael Chen

unread,
Jul 18, 2008, 9:24:51 PM7/18/08
to am...@googlegroups.com
var extractedStrings = selectedFiles.collect(function(el){return el.value});

2008/7/19 acale...@gmail.com <acale...@gmail.com>:

MSN: jzch...@hotmail.com

acale...@gmail.com

unread,
Jul 18, 2008, 11:01:19 PM7/18/08
to buffalo与Amowa
<input type="checkbox" name="fileIds" id="fileIds" value="11">
<input type="checkbox" name="fileIds" id="fileIds" value="12">
<input type="checkbox" name="fileIds" id="fileIds" value="13">
<input type="checkbox" name="fileIds" id="fileIds" value="14">
运行:var selectedFiles = document.getElementsByName("fileIds"); 之
后,selectedFiles是一个对象。
var extractedStrings = selectedFiles.collect(function(el){return
el.value}); 这样会报JavaScript错。
var extractedStrings = [11,12,13,14].collect(function(el){return
el.value}); 可以得到:extractedStrings = 11,12,13,14
如果将extractedStrings = 11,12,13,14传给JAVA方法,也会页面错误,也就是说类型不匹配。尝试如下:
如果后工拼出一个extractedStrings = [11,12,13,14] ,JAVA也会报错,数组对象不匹配:cannot find
the method deleteBaseFile(java.lang.String[[11,12,13,14]]) for com.
如果后工拼出一个extractedStrings = 11,12,13,14,JAVA也会报错,数组对象不匹配:cannot find
the method deleteBaseFile(java.lang.String[11,12,13,14]) for
com..................BaseService
如果后工拼出一个extractedStrings = {11,12,13,14} ,JAVA也会报错,数组对象不匹配:cannot find
the method deleteBaseFile(java.lang.String[{11,12,13,14}]) for
com................BaseService

On Jul 19, 9:24 am, "Michael Chen" <mechil...@gmail.com> wrote:
> var extractedStrings = selectedFiles.collect(function(el){return el.value});
>
> 2008/7/19 acaleph2...@gmail.com <acaleph2...@gmail.com>:
> MSN: jzche...@hotmail.com

acale...@gmail.com

unread,
Jul 18, 2008, 11:03:35 PM7/18/08
to buffalo与Amowa
当然了,如果将一个字串传给JAVA,应该没错的,问题是如果将一个JS的数组对象给JAVA方法呢?

On Jul 19, 11:01 am, "acaleph2...@gmail.com" <acaleph2...@gmail.com>
wrote:

Michael Chen

unread,
Jul 18, 2008, 11:22:35 PM7/18/08
to am...@googlegroups.com
数组里面的对象类型必须能够被java端识别。在你的例子中,数组里面每一个对象都是一个HTMLElement, Java端没有对应的对象类型。

2008/7/19 acale...@gmail.com <acale...@gmail.com>:

MSN: jzch...@hotmail.com

acale...@gmail.com

unread,
Jul 18, 2008, 11:45:07 PM7/18/08
to buffalo与Amowa
现在问题基本有了答案:我得手工拼字串送给JAVA来处理了。
最后一个关于JS的问题,既然是HTMLElement,那应该不能用collection方法吧,即:
selectedFiles.collect(function(el){return el.value}); 这样写是不是不行呵。

On Jul 19, 11:22 am, "Michael Chen" <mechil...@gmail.com> wrote:
> 数组里面的对象类型必须能够被java端识别。在你的例子中,数组里面每一个对象都是一个HTMLElement, Java端没有对应的对象类型。
>
> 2008/7/19 acaleph2...@gmail.com <acaleph2...@gmail.com>:
> MSN: jzche...@hotmail.com

Michael Chen

unread,
Jul 19, 2008, 12:29:47 AM7/19/08
to am...@googlegroups.com
.collect方法prototype为数组添加的增强方法,可以用于任何数组

2008/7/19 acale...@gmail.com <acale...@gmail.com>:

MSN: jzch...@hotmail.com

Reply all
Reply to author
Forward
0 new messages