2012-02-10 4 views
1

J'ai un contrôleur de ressort;Grille de charge ExtJS après demande Ext.Ajax

@RequestMapping("/showreport") 
@ResponseBody 
public Map<String, ? extends Object> showreport 
     (parameters) 
{ 
    List<Object> listOne = ...; 
    Object objectOne = ...; 


    Map<String,Object> modelMap = new HashMap<String,Object>(3); 
    modelMap.put("total", listOne.size()); 
    modelMap.put("data", listOne); 
    modelMap.put("summary", objectOne); 
    modelMap.put("success", true); 
    return modelMap; 
} 

et j'ai le code ExtJS comme celui-ci pour afficher la grille dans une fenêtre modale

Ext.Ajax.request({     
     url: 'url', 
     params: 
     { 
      // parameters 
     }, 
     success: function (response) 
     {      
      var jsonData = Ext.util.JSON.decode(response.responseText); 

      store.proxy = new Ext.ux.data.BufferedPagingMemoryProxy(jsonData.data); 
      /* what will I do */ 

      new Ext.Window({ 
       title: 'title', 
       plain: true, 
       border: false, 
       modal: true, 
       items: [grid], 
       height:Ext.getBody().getViewSize().height - 100, 
       width:Ext.getBody().getViewSize().width*0.8 //80% 
      }).show(); 

     }, 
     failure: function(){}, 
    }); 

et ma grille, magasin et les lecteurs sont comme ça;

var Report = Ext.data.Record.create([ 
    {name: 'a'}, 
    {name: 'b', type: 'string'}, 
    {name: 'c', type: 'string'}, 
    {name: 'd', type: 'string'}, 
    {name: 'e', type: 'string'}, 
    {name: 'f', type: 'string'}, 
    {name: 'g'}, 
    {name: 'h'}, 
    {name: 'i', type: 'string'}, 
    {name: 'j'}, 
    {name: 'k', type: 'string'}, 
    {name: 'l', type: 'string'} 
]); 


var reader = new Ext.data.JsonReader({ 
    totalProperty: 'total', 
    successProperty: 'success', 
    idProperty: 'id', 
    root: 'data' 
}, 
Report); 

store = new Ext.data.JsonStore({ 
    id: 'reportID', 
    reader: reader 
}); 

var grid = new Ext.grid.GridPanel({ 
    id: 'tripDailyReportList', 
    store: store, 
    autoHeight : true, 
    loadMask: true, 
    autoHeight: true, 
    columns:[ 
      new Ext.grid.RowNumberer(), 
      {header: 'headerA', dataIndex: 'a'}, 
      {header: 'headerB', dataIndex: 'b'}, 
      {header: 'headerC', dataIndex: 'c', sortable: true}, 
      {header: 'headerD', dataIndex: 'd', sortable: true}, 
      {header: 'headerE', dataIndex: 'e', sortable: true}, 
      {header: 'headerF', dataIndex: 'f'}, 
      {header: 'headerG', dataIndex: 'g'}, 
      {header: 'headerH', dataIndex: 'h'}, 
      {header: 'headerI', dataIndex: 'i'}, 
      {header: 'headerJ', dataIndex: 'j'}, 
      {header: 'headerK', dataIndex: 'k'} 
      ] 
}); 

Je souhaite charger une grille dans une fenêtre après une requête ajax. J'ai ouvert la fenêtre, mais je ne pouvais pas charger le magasin avec des données. mon json est comme ceci;

{"total": 56, "données": [{"a": "1", "b": "2", "c": "3", "d": "4" , "e": "5", "f": "6", "g": "7", .....}], "résumé": {"a": "1", "b": "2", "c": "3", "d": "4", "e": "5", "f": "6"}, "succès": vrai}

tu m'aides, pour arranger ça?

Répondre

1

Nous devons inclure des balises meta json dans le contrôleur. Le idProperty du lecteur doit être identique au idProperty de json. Que nous pouvons utiliser var jsonData = Ext.util.JSON.decode(response.responseText); grid.store.loadData(jsonData);

0

Je ne sais pas ce que ce plugin fait, mais il semble que les données ne sont pas chargées en magasin. Peut-être qu'appeler store.load() sera suffisant.

+0

Merci pour votre réponse, j'ai résolu mon problème. Nous devons inclure des balises meta json dans le contrôleur. L'idProperty de Reader doit être identique à idProperty de json. Que nous pouvons utiliser 'var jsonData = Ext.util.JSON.decode (response.responseText); grid.store.loadData (jsonData); ' – vtokmak