struts2前台对象数组传递

本文详细介绍了在AJAX中传递对象数组时遇到的问题,包括使用input标签和通过jQuery库进行传递的方法,并解决了struts2框架下接收数组格式不一致的问题。提供了修改后的jQuery代码以确保正确接收数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我知道的关于action接收前台的对象数组的方式有两种

1.在input标签中利name属性进行设置

<input name="studentList[0].name">

2.通过ajax来传递

 

            var billList = [];
            $('#data_tab tr').each(function(index, tr) {
                tr = $(tr);

                billList.push({
                    channelId : $('#channel option:selected').val(),
                    serviceId : tr.find('td:nth-child(1) a').attr('service_id'),
                    serviceName : tr.find('td:nth-child(1) a').html().trim(),
                    playTime : $('#playTime').val() + ' ' + tr.find('td:nth-child(2)').html() ,
                    duration : tr.find('td:nth-child(3)').html()
                });
            });

            var dataPara = { channel : $('#channel option:selected').val(),
                playTime:$('#playTime').val(),
                billList:billList
            };
            //            console.log(dataPara)
            $.ajax({type:'post',
                url:'playBillAction!save.action',
                data:dataPara,
                dataType:'json',
                success:function(rtn) {
                    //                    console.log(rtn);
                    if (rtn.opResult.isSuccessed) {
                        alert('操作已成功!');
                    } else {
                        alert('操作失败,请稍后再试!');
                    }
                }
            });

这里用的ajax库是jquery-1.4.2,但是在实际运行的时候,发现后台action的billList属性并没有被正确赋值。跟踪后发现,前台发到服务器的参数形式是这样的:billList[0][channnelId]=1,这种方式struts2好像不支持,必须是billList[0].channelId=1样式才行。

跟踪jquery的源代码后发现,这一步是在function buildParams( prefix, obj )中完成的,把对应部分改成:

 

else if ( !traditional && obj != null && typeof obj === "object" ) {
				// Serialize object item.
				jQuery.each( obj, function( k, v ) {
					buildParams( prefix + "." + k, v );
				});
					
			}

 然后就可以正常接收了。

附件是修改完成的jquery代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值