0

我有一个问题,我一个人无法解决。因此,非常感谢您的帮助。我们开始吧:总是如果我在我的网格中编辑多于一行,我会在我的控制器中获得一个 bean 列表以供进一步处理......例如保存更改,但如果我只编辑 1 行我会得到一个空列表或该列表为空。只有当我编辑超过 1 行时它才有效。

这是我的商店和代理:

 var billRecordStore = null;
    function createbillRecordStore() {



var billRecordProxy = new Ext.data.HttpProxy({
            api : {
                read : applicationPath + '/filterRecords',
                update : applicationPath + '/updateRecords'
            },
            type : 'json',
            reader : {
                type : 'json',
                root : 'data',
                idProperty : 'brid',
                totalProperty : 'total'
            },
            writer : {
                type : 'json'
            },
            actionMethods: {
                create: 'POST', read: 'POST', update: 'POST', destroy: 'POST'
            },
            simpleSortMode: true
        });

        billRecordStore = Ext.create('Ext.data.Store', {
            pageSize : 25,
            model : 'billRecordModel',
            storeId : 'billRecordStore',
            proxy : billRecordProxy,
            remoteSort : false,
            autoLoad : false

        });
    }

那是我的 SpringMVC 控制器:

 @ResponseBody  
 @RequestMapping(value = "/updateRecords", method =
 {RequestMethod.POST, RequestMethod.GET}, produces =
 "application/json")    
 public ResponseWrapper updateBillrecord(
     @RequestBody List<BillRecordsDTO> dirtyBillRecords
 ) { 
     if (dirtyBillRecords != null && dirtyBillRecords.size() > 0)
     {
         billRecordService.updateBillRecords(dirtyBillRecords);
     }
  return null;  
 }

如果我只编辑网格中的 1 行,则此列表List<BillRecordsDTO> dirtyBillRecords始终可用。null超过 1 个已编辑的行运行良好。我在服务器端没有抛出异常。在前端,我在 chrome 浏览器中只得到这个异常:

POST http://localhost:8080/servicetool/updateRecords?_dc=1384181576575 400 (Bad Request) ext-all-debug.js:32379
Ext.define.request ext-all-debug.js:32379
Ext.define.doRequest ext-all-debug.js:71730
Ext.define.update ext-all-debug.js:71455
Ext.define.runOperation ext-all-debug.js:74757
Ext.define.start ext-all-debug.js:74704
Ext.define.batch ext-all-debug.js:42884
Ext.define.sync ext-all-debug.js:43606
Ext.define.save ext-all-debug.js:43634
saveChanges billRecordController.js:113
Ext.create.items.tbar.handler serviceToolView.js:206
Ext.define.fireHandler ext-all-debug.js:46226
Ext.define.onClick ext-all-debug.js:46216
(anonymous function)
wrap

有任何想法吗?您需要更多信息吗?就告诉我嘛。非常感谢您提前。埃德弗雷德

4

1 回答 1

1

查看JSON Writer 文档allowSingle中的配置。

默认情况下,JSON Writer 会将单个记录作为对象发送,同时将多个记录作为数组发送。将 allowSingle 设置为 false 告诉编写器始终将请求数据包装在一个数组中,而不管写入的记录数如何。

编辑:您应该能够通过查看 POST 看到这一点。在您当前的配置中,您应该看到为一条记录发送的请求与为多条记录发送的请求之间存在显着差异。但是,一旦将allowSingle配置切换为 false,请求应该看起来非常相似,除了要发送的数组的大小。

于 2013-11-11T15:43:13.260 回答