java - jqGrid不显示来自java的Json数据

标签 java javascript jquery json jqgrid

这是我的java服务

@RequestMapping(value="/refreshInterviewServiceList1", method = RequestMethod.GET)
public @ResponseBody JSONObject refreshInterviewServiceList1() throws JSONException{

    List<ReportInterview> reportInterview = reportInterviewServiceImpl.findByReportId(reportId);

    JSONObject output = new JSONObject();
    JSONArray toplevel = new JSONArray();
    output.put("page", 1);
    output.put("records", reportInterview.size());
    output.put("total",1);

    for(int i = 0;i<reportInterview.size();i++){

        JSONObject data = new JSONObject();
        JSONArray data1 = new JSONArray();
        data.put("id", i+1);

        data1.put(reportInterview.get(i).getName());
        data1.put(reportInterview.get(i).getOccupation());

        data.put("cell", data1);

        toplevel.put(data);

    }

    output.put("rows", toplevel);

    System.out.println(output);

    return output;
}

这是我的 JavaScript

<script type="text/javascript">

jQuery(document).ready(function () {
    jQuery("#projectTable").jqGrid({
        url: 'refreshInterviewServiceList1',
        datatype: "json",
        jsonReader : { 
            root: "rows", 
            page: "page", 
            total: "total", 
            records: "records", 
            repeatitems: true, 
            cell: "cell", 
            id: "id"
         },
        colNames:['Id','Name','Occupation'],
        colModel:[
            {name:'id',index:'id', width:10},
            {name:'name',index:'name', width:10},
            {name:'occupation',index:'occupation', width:10}
        ],
        rowNum:10,
        rowList:[10,20,30],
        height:460,
        width:700,
        pager: "#pagingDiv",
        viewrecords: true,
        caption: "Projects"
    });
});

我的 json 对象的输出

{
"total": 1,
"page": 1,
"records": 2,
"rows": [
    {
        "id": 1,
        "cell": [
            "232",
            "12"
        ]
    },
    {
        "id": 2,
        "cell": [
            "45",
            "454"
        ]
    }
]
}

我现在的问题是jqgrid无法显示jqgrid中的json数据...仅显示空白列表...请帮助...谢谢!

最佳答案

这是我不久前为个人项目编写的一个实用程序。它生成 jqGrid 可以呈现的数据。

import java.util.List;

public class JQGridContainer {
    private Integer page;
    private Integer total;
    private Integer records;
    private List<JQGridRow> rows;

    //getters and setters are omitted for brevity
}

    import java.util.List;

    public class JQGridRow {

    private Integer id;
    private List<String> cell;

    //getters and setters are omitted for brevity


    }



import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.log4j.Logger;

public class JQGridFormatterUtil {

    private static final Logger logger = Logger
            .getLogger(JQGridFormatterUtil.class);

    public static String getJSON(int currentPageNo,
            int totalRecords, Set objectsToBeAdded,
            List orderedPropertyNames) {

        Integer pages = 0;

        if(totalRecords % 50 >0){
            pages = (totalRecords/50)+1;
        }
        else{
            pages = (totalRecords/50);
        }

        JQGridContainer container = new JQGridContainer();
        container.setPage(currentPageNo);
        container.setTotal(pages);
        container.setRecords(totalRecords);
        List rows = new ArrayList();
        if (!objectsToBeAdded.isEmpty()) {
            for (Object obj : objectsToBeAdded) {
                JQGridRow row = new JQGridRow();
                row.setId(new Integer(getPropertvalue(obj, "id")));
                List cells = new ArrayList();
                for (String propertyName : orderedPropertyNames) {
                    cells.add(getPropertvalue(obj, propertyName));
                }
                row.setCell(cells);
                rows.add(row);
            }
        }
        container.setRows(rows);
        return JSONUtil.convertToJSON(container);

    }

    private static String getPropertvalue(Object bean, String propName) {
        String val = null;
        try {
            val = ObjectUtils.toString(PropertyUtils.getProperty(bean, propName));
        } catch (IllegalAccessException e) {
            logger.error(e);
        } catch (InvocationTargetException e) {
            logger.error(e);
        } catch (NoSuchMethodException e) {
            logger.error(e);
        }
        return val;
    }


import org.apache.log4j.Logger;

import com.google.gson.Gson;

public class JSONUtil {

    private static final Logger logger = Logger.getLogger(JSONUtil.class);


    public static String convertToJSON(Object obj){
        String json = null;
        Gson gson = new Gson();     
        json=(gson.toJson(obj));
        logger.debug(json);
        return json;
    }

}

}

关于java - jqGrid不显示来自java的Json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17939560/

相关文章:

javascript - 无法从导入中引入 Vue,但如果我将它引入 html 文件中,则可以访问它

java - 使用 Java 代码重新平衡 Storm 拓扑

javascript - 根据对象的数量将每个 JSON 对象及其项目放入 <li> 中

java - 为什么我们不能访问java文件中非公共(public)类的方法?

javascript - 如何在 angularjs 应用程序中实现安全 (!) 身份验证系统?

javascript - 文件浏览器未定义

javascript - 为什么这个递归函数会给我一个 "Maximum call stack size exceeded"错误?

javascript - jQuery DataTable 不是函数

java - jdbc性能

java - 启动时出现奇怪的 tomcat7