使用servlet作为数据源,iggrid对null值失败

时间:2014-08-09 13:51:50

标签: java jsp servlets ignite-ui iggrid

我有一个igGrid,它显示数据库表中的字段,其中有一些条目为NULL。

   $.ig.loader(function () {           
        $("#igGrid").igGrid({
            autoGenerateColumns: false,
            dataSource: "/myapp/SrvUser?parm=all",
            columns: [                          
                { headerText: "ID",      key: "id",    dataType: "string" },
                { headerText: "Name",    key: "name",  dataType: "string" },
                { headerText: "Type",    key: "type",  dataType: "string" }
            ],
            features: [{              
                blah ... 
                }]
        });

servlet返回如下数据:

    userList = (List<BeanUser>) DButil.getUserList(parm);
    String json = gson.toJson(userList);

    response.setContentType("application/json");
    response.getWriter().write(json);

如果任何列为NULL且出现此错误,则会失败:

Error: The remote request to fetch data has failed: (parsererror) There was an error parsing the JSON data and applying the defined data schema: 
The input data doesn't match the schema, the following field couldn't be mapped: type

棘手的部分是在Eclipse Debug中,我设置了一个断点,在它发送之前捕获了servlet中的JSON数据,如果我在网格定义中使用了这些精确数据,它就可以工作了!

var data = [{"id":"ID1","name":"Name1","type":"regular"}, 
            {"id":"ID2","name":"Name2"} 
           ];

 $.ig.loader(function () {     
     . . . 
    dataSource: data,

所以它不是网格定义,我有其他包含NULL值的igGrids(在网格中正确显示为空白),但这些网格不使用servlet作为dataSource。他们用这个:

dataSource: $.parseJSON('<%=request.getAttribute("jsonData")%>'),

我是否必须在servlet中更改某些内容?还是网格定义?还有另一种定义dataSource以从servlet获取数据的方法吗?

1 个答案:

答案 0 :(得分:1)

Infragistics调查并发现确实,这是一个错误。他们目前正在修复。

与此同时,他们通过将网格定义放在AJAX调用中提供了一种解决方法,这是有效的。

        //grid2 will initialize correctly
        $.ajax({
            type: "POST",
            url: '@Url.Action("GetJsonString", "Home")',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                var result = response;
                debugger;
                $("#grid2").igGrid({
                    autoGenerateColumns: false,
                    dataSource: result,
                    columns: [
                        { headerText: "ID", key: "id", dataType: "string" },
                        { headerText: "Name", key: "name", dataType: "string" },
                        { headerText: "Type", key: "type", dataType: "string" }
                    ],

                });
            },
            error: function (response) {

            }
        });