jqgrid学习(四)主要问题

在使用jqgrid的过程中遇到了了很多问题,将主要问题分享一下

1、引入的jquery版本冲突问题

当时项目中已经引入了jquery的一个高版本,放在一个基本文件中引用,而我的页面引用了这个基本文件,但是我下载的jqgrid的jquery版本是1.7的,引入之后,前端一直报错说“找不到jquery的定义,   jQuery("#scheduleTable").jqGrid不是function”之类的错,一开始我并不清楚那个基本文件中也引入了jquery,以为是引入顺序出错,或者jquery版本出错,一直不停换顺序,换版本,调试了很久,发现这个问题之后,我将基本文件中我需要引入的文件复制到我的页面引入,同时也刻意注意了引入的顺序,刷新之后,果然解决了。

2、发送请求,出现BadRequest错误

网上很多资料说是后台的实体类bean与前台传来的数据类型不匹配

后台我用的是SpringMVC的@requestBody接收参数,我的解决过程如下:

(1)将后台实体Bean的每个属性类型改为String,但是不成功;

(2)资料说“前台传参时参数的顺序与后台实体类的各个属性的顺序不一致”也是原因,于是将顺序改为一致,问题仍然存在;

(3)“如果是传了非实体bean属性的参数过来也会发生这种情况”,jqgrid在发送请求时除了传自定义的参数,还传来了“page”,"rows"等参数,于是我在实体Bean中加入了这些字段,前台没有报错,但是后台断点看不到传来的值;(这是什么原因暂时还没有解决,如果各位知道原因请留言,共享资源);

(4)最后决定将@requestBody换成@requetParam,一个参数一个参数来接收,这时候,后台看到了传过来的值。

一位大我一届的师兄也是我导师看到第三个问题的时候,他告诉我需要将前台的参数封装成一个对象,传到后台@requestBody才会接收,当第4步成功的时候,我大概也猜到了这个原因,但是我的确是封装成了一个对象:

var postData={//父表参数

                                   projectName:$scope.projectName,

                                   subSystem:$scope.subSystem,

                                   module:$scope.module,

                                   father_son:father_son

                };

只不过当时我忘记了,jqgrid自带的参数并没有被封装。(这是个人猜想,因为时间原因,我必须返校做毕业设计,这个问题还没有来得及测试检验)

3、后台数据正确传到了前端,可是表格数据就是不显示

这个问题应该是使用过jqgrid的基本都会碰到,网上有很多种说法,因为后台传送的json数据格式不对,因为jqgrid对json的数据格式非常严格。

SpringMVC使用@responseBody返回的数据其实就是json格式的,只是,jqgrid有它自己的格式,我设置的jsonReader如下:

jsonReader : {

                                       root:"rows",

                                       page:"page",

                                       total:"total",

                                       records:"records",

                                       repeatitems:false,

                                       id:"0",

                              },

那么对应的格式是这样:

{
        "page": "1",
        "total": "13",
        "records": "13",
        "rows": [
            {
                "pageNumber": 0,
                "pageSize": 0,
                "remark": null,
                "projectName": "哈哈哈",
                "subSystem": "sub1",
                "module": null,
                "category": "number1"              
            },
            {
               "pageNumber": 0,
                "pageSize": 0,
                "remark": null,
                "projectName": "哈哈哈1",
                "subSystem": "sub2",
                "module": null,
                "category": "number2",              
            }
           ]
}

所以在后台,需要将
        "page": "1",
        "total": "13",
        "records": "13",

这些参数进行拼接,“rows”{}中的内容放在一个List中,最外面的{}是一个对象,这个对象中定义了“rows”{}这个List。返回这个对象即可。

这个地方我犯了一个错,把最外层{}的对象也放进了一个List,循环set,结果造成json数据中“rows”{}中的每个对象也包含了"page": "1", "total": "13", "records": "13"这些参数,所以一直显示不出来。

还有一些注意的点

jqgrid高一点的版本中

 colModel: [

                        {name:"projectName",index:"projectName",width:80,key:true},

                       {name:"subSystem",index:"subSystem",width:130}

]中name的值需要用“”引起来,不能用''。


猜你喜欢

转载自blog.csdn.net/luuvyjune/article/details/70194873