如果我只更改1行,为什么我的数据存储区不会将更改发送回服务器?

时间:2013-11-11 15:20:10

标签: spring-mvc extjs4.2

我有一个问题,我无法独自解决。所以非常感谢你的帮助。 开始了: 总是如果我在网格中编辑多行,我会在控制器中获得一个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;  
 }

如果我只在网格中编辑一行,则此列表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

有什么想法吗?您需要更多信息吗?就告诉我嘛。 非常感谢你提前。 edfred

1 个答案:

答案 0 :(得分:1)

查看JSON Writer documentation中的allowSingle配置。

默认情况下,JSON Writer会将单个记录作为对象发送,同时将多个记录作为数组发送。将allowSingle设置为false会告诉writer始终将请求数据包装在一个数组中,无论写入的记录数是多少。

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