Json Data没有在spring 3 mvc的jqGrid中加载

时间:2010-12-09 23:18:12

标签: jquery json jqgrid

点击按钮我试图用json datadtype加载jqgrid。 我尝试了很多方法来加载数据,但它失败并显示空网格。 请告知我在这里失踪的事。

我的网格

$("#bedata").click(function(){
    jQuery("#list2").jqGrid({
        url:'/mso/interop/interopcompanycfg/getDSAccounts?companyId=${interopcompcfg.company.id}',
      datatype: "json",
        mtype: 'GET',
        colNames:['Id','DTCCID','COMPANYID','DTCCACCOUNTID'],         
        colModel:[
         {name:'ID',index:'id', sortable:true, align:'center',width:90},
         {name:'DTCCID',index:'dsId', sortable:true, align:'center',width:90},
         {name:'COMPANYID',index:'companyId',sortable:true, align:'center', width:120},
         {name:'DTCCACCOUNTID',index:'dsLegalEntityId', sortable:true, align:'center',width:130}      
        ],
        rowNum:10,
        rowList:[10,20,30],
        pager: '#pager2',
        sortname: 'dsId',
        viewrecords: true,
        sortorder: "desc",
        caption:"DS ACCOUNTS",
        jsonReader: {
      repeatitems : false,    
      root:"rows",
      cell: "",
      id: "0"
      } 
    });
  jQuery("#list2").jqGrid('navGrid','#pager2',{edit:true,add:true,del:true});
 });


spring requestmapping
@RequestMapping(value="/getDSAccounts",method= RequestMethod.GET) 
 public @ResponseBody  List<Vector<String>> getDSAccountsJSON(HttpServletRequest request,HttpServletResponse httpResponse) {
  try{

   UsersJsonDTO usersJsonDTO = new UsersJsonDTO(); 
      usersJsonDTO.setPage("1");   
   usersJsonDTO.setRecords("8");     
   usersJsonDTO.setTotal("20");

   Company cmp=(Company) request.getSession().getAttribute("company"); 
   List<DSAccounts> message = interopService.getDSAccounts(cmp);  

   httpResponse.setContentType("text/javascript");
   int i=0;
   List<DTCCAccounts> rowJsonList = new ArrayList<DTCCAccounts>();   
    for (DSAccounts dsAccountDTO:message)
    {   
    DTCCAccounts rowJson = new DTCCAccounts();       
    rowJson.setId(String.valueOf(i+1));
    rowJson.setDsId(String.valueOf(dsAccountDTO.getDsId()));
    rowJson.setCompanyId(String.valueOf(dsAccountDTO.getCompany().getId()));
    rowJson.setDsLegalEntityId(dsAccountDTO.getDsLegalEntityId());
    rowJsonList.add(rowJson);
    } 

   usersJsonDTO.setRows(rowJsonList);
      return usersJsonDTO;

2 个答案:

答案 0 :(得分:0)

如果您的JSON数据包含

等元素
{
    "page": "1",
    "records": "8",
    "rows": [
        {
            "companyId": "1661",
            "dsId": "72",
            "dsLegalEntityId": "SELLSIDE01",
            "id": "1" 
        },
        {
            "companyId": "1661",
            "dsId": "74",
            "dsLegalEntityId": "SELLSIDE03",
            "id": "1" 
        } 
    ],
    "total": "20" 
}

您应该将所有列的name属性更改为您当前用于index的值,并且网格将填充数据。

您的数据还存在一个问题:您有两个ID相同的元素。因此,如果您选择第二行,则将选择第一行。因此,您应该选择“dsId”作为id或生成具有唯一ID的数据。

更新: Here是相同的代码,只修改名称,here是固定ID的网格。

答案 1 :(得分:0)

尝试显式设置jsonReader的所有属性。喜欢这个

jsonReader : {
      root: "rows",
      page: "page",
      total: "total",
      records: "records",
      repeatitems: false,
      cell: "cell",
      id: "id"
}

你拥有的是:

jsonReader: {
  repeatitems : false,    
  root:"rows",
  cell: "",
  id: "0"
} 

为什么ID设置为 0 ? jqGrid如何知道您的JSON数据中的id是什么?另外,为什么要删除页面单元格属性?

我从Spring MVC 3应用程序返回的JSON格式如下:

{
"total":"10",
"page":"1",
"records":"3",
"rows":[{"id":1,"firstName":"John","lastName":"Smith"},
    {"id":2,"firstName":"Jane","lastName":"Adams"},
    {"id":3,"firstName":"Jeff","lastName":"Mayer"}]

}

另外,我注意到你做了以下事情:

 httpResponse.setContentType("text/javascript");

我没有在我的Spring 3 MVC中这样做。查看我在http://krams915.blogspot.com/2010/12/jqgrid-and-spring-3-mvc-integration.html

撰写的本教程