如何将jqgrid中编辑的多行传递给服务器控制器?

时间:2012-02-13 04:44:10

标签: jqgrid controller rows

我是jqgrid的新人。

我想传递在jqgrid中编辑的多行来传递MVC服务器控制器。 controller期望json字符串类型的数据。

我的jsp如何将所有行传递给控制器​​?

jQuery(" #save")。click(function(){     警告("输入save fn");

var gridData=jQuery("#gridList").jqGrid('getGridParam','data');

    jQuery.ajax({
      url         : '/uip/web/p2/saveEmployeeList.dev'
      ,type        : 'POST'
      ,cache       : false
      ,data        : JSON.stringify(gridData)
      ,contentType : 'application/json; charset=utf-8'
      ,dataType    : 'json'
  })         

});

我在控制器中打印出HttpServletRequest。存在一行。

即使是很少的线索也会有所帮助。

1 个答案:

答案 0 :(得分:3)

如果我理解正确,您想在编辑任何行后,通过一个Ajax操作而不是Ajax请求保存所有已编辑的行?

如果是这样,这可能是解决方案。您可以使用配置中的“clientArray”选项作为URL参数,而不是Ajax。这会导致jqGrid在JavaScript内部保存每个已编辑的行,并且不会向您的服务器发送任何内容。

点击保存按钮,您可以执行以下操作:

var changedRows = [];

//changedRows is a global array
if($('#save-rows').length) {
    $('#save-rows').click(function() {
    var postData = {}

    $.each(changedRows, function(key) {
        postData[key] = $('#paymentsgrid').jqGrid('getRowData', this);
    });

    $.post(baseUrl + '/controller/action', {
        'data' : postData
    }, function(response) {
        $('<div></div>').html(response.content).dialog({
            'title' : 'Message',
            'modal' : true,
            'width' : 800,
            'height' : 400,
            'buttons' : {
                'OK' : function() {
                    $(this).dialog('close');
                }
            }
        });

        if(response.reload) {
            $('#grid').trigger('reloadGrid');
        }

    }, 'json');
    });
}

同样重要的是在网格中指定保存事件:

$('#paymentsgrid').jqGrid('saveRow', paymentController.lastsel, null, 'clientArray', null, function(rowId) {
    changedRows.push(rowId);
});

您可能应该修改或优化某些内容,但在基本内容中,这应该有用,或者让您了解如何完成您想要的内容。