2010-12-09 3 views
0

En cliquant sur un bouton, je suis en train de charger le jqGrid avec JSON datadtype. J'ai essayé de nombreuses façons de charger des données, mais elles échouent et affichent une grille vide. S'il vous plaît aviser ce que je manque ici.Json données ne se charge pas en jqGrid avec ressort 3 mvc

Ma grille

$("#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; 
+0

Pouvez-vous poster votre JSON afin que nous puissions valider? Vous pouvez également le valider vous-même en utilisant http://www.jsonlint.com/ – thomaspaulb

+0

J'ai vérifié sur jsonlimt.com et le Json est valide.{ "page": "1", "records": "8", "lignes": [ { "COMPANYID": "1661", "DSID": "72", "dsLegalEntityId": "SELLSIDE01", "id": "1" }, { "COMPANYID": "1661", "DSID": "74", "dsLegalEntityId": "SELLSIDE03", "id": " 1 " } ], " total ":" 20 " } – Sabari

+0

Je suppose que le jsonmapping dans colModel est à l'origine du problème ... mais pas de documentation ou d'exemples disponibles. un indice ou un lien de support serait d'une grande aide – Sabari

Répondre

0

Si les données JSON contiennent des éléments tels que

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

Vous devez modifier la propriété name de toutes les colonnes aux valeurs que vous utilisez actuellement index et la grille être rempli avec les données.

Un problème supplémentaire existe dans vos données: vous avez deux éléments avec le même ID. Donc, si vous sélectionnez la deuxième rangée, la première sera sélectionnée. Vous devriez donc choisir "dsId" comme ID ou produire les données ayant des identifiants uniques.

mise à jour:Here est le même code où seuls les noms sont fixes et here est la même grille où ids sont également fixés.

0

Essayez de spécifier explicitement toutes les propriétés de votre jsonReader. Comme cette

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

Ce que vous avez est le suivant:

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

Pourquoi l'id mis à ? Comment le jqGrid connaitrait-il l'identifiant de vos données JSON? Aussi, pourquoi avez-vous retiré les au total, page, cellulaire propriétés?

Le format JSON je suis revenu de mon Spring MVC 3 application est exactement ce qui suit:

{ 
"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"}] 

}

, je remarque aussi que vous avez fait ce qui suit:

httpResponse.setContentType("text/javascript"); 

Je n Je n'ai pas à le faire dans mon Spring 3 MVC. Vérifiez ce tutoriel je l'ai écrit à http://krams915.blogspot.com/2010/12/jqgrid-and-spring-3-mvc-integration.html

+0

Désolé, mais il suffit d'inclure uniquement les properies de 'jsonReador' qui sont ** différentes des paramètres par défaut **. Dans la documentation de jqGrid http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_data sont également décrits ce que signifie 'id:" 0 "'. C'est le réglage correct. On peut obtenir les mêmes résultats, y compris 'key: true' dans la définition de la colonne ID. Le tutoriel que vous avez écrit semble intéressant, mais jqGrid permet * différentes façons de sérialiser les données *. Il suffit d'utiliser le 'jsonReader 'correspondant et parfois aussi d'utiliser l'option supplémentaire' jsonmap'. – Oleg

+0

Intéressant. Je viens d'essayer maintenant. J'ai enlevé toutes les propriétés. Il s'avère que vous avez juste besoin de la propriété repeatitems: false dans jsonReader. Il se trouve que jqGrid a des conventions de noms de champs internes. Si votre réponse JSON n'utilise pas 'rows' comme nom racine, vous devrez déclarer explicitement la propriété root. – chris

+0

@Oleg, vous avez raison. Ce n'est pas nécessaire si vous suivez la convention de nommage jqGrid. Dans le cas de Sabari (la personne qui a demandé), son JSON semble acceptable. Peut-être que le problème est avec son printemps. Je suspecte que contentType. – chris