Создайте сетку ext-js из JSONObject

#javascript #servlets #extjs #extjs4

#javascript #сервлеты #extjs #extjs4

Вопрос:

Я новичок в extjs и пытаюсь создать сетку, используя ext js, из JSONObject, отправленного сервлетом.

Вот мой код на стороне клиента: (предполагая, что JSONObject отправлен)

 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    response.setContentType("text/html");
    String nameSent = request.getParameter("name"); 
    String dobSent = request.getParameter("dob"); 
    String addrSent = request.getParameter("addr");
    System.out.println("Name : "  nameSent  " - Dob : "  dobSent  " - Addr : "  addrSent);

    JSONObject toSendBack = new JSONObject(); 
    toSendBack.put("nameSent", nameSent); 
    toSendBack.put("dobSent", dobSent); 
    toSendBack.put("addrSent", addrSent); 
    toSendBack.put("success",true);
    response.getWriter().print(toSendBack.toString());
    response.setStatus(HttpServletResponse.SC_OK);
}
  

Итак, у меня есть 3 строки, которые я хотел бы поместить в сетку extjs, как только я нажму «отправить»

Вот мой код ext-js: (по крайней мере, самая важная часть)

 var form = Ext.create('Ext.form.Panel', {
        renderTo : 'form', 
        frame : true, 
        title : 'Subscription', 
        width : 250, 
        url : 'TestServlet', 
        method : 'POST', 

        fieldDefaults : {
            labelAlign : 'left', 
            labelWidth : 90, 
            anchor : '100%'
        },

        items : [{
            xtype : 'textfield', 
            fieldLabel : 'Name ', 
            name : 'name',
            allowBlank : false
        }, {
            xtype : 'datefield', 
            fieldLabel : 'Dob ', 
            name : 'dob'
        }, {
            xtype : 'textfield', 
            fieldLabel : 'Address ', 
            name : 'addr'
        }, {
            xtype : 'radiogroup', 
            columns : 1, 
            fieldLabel : 'Gender ',
            name : 'gender', 
            items : [{
                name : 'male',
                boxLabel : 'Male', 
                inputValue : 'male'
            }, {
                name : 'female', 
                boxLabel : 'Female',
                inputValue : 'female'
            }]
        }, {
            xtype : 'button', 
            text : 'Submit', 
            handler : function(){
                var dataToSend = this.up('form').getForm(); 
                dataToSend.submit(
                {
                    success:function(form,action)
                    {
                        alert("success");
                        var result=Ext.JSON.decode(action.response.responseText);
                        resultPanel.items.items[0].setValue(result.nameSent);
                    },
                    failure:function(form,action)
                    {
                        alert("failure");                           
                    }
                }
                ); 
            }
        }]
    });
  

Вопрос в том, что я не знаю, как создать сетку и модель для ее определения.

Вы можете мне помочь?

Ответ №1:

Привет, я предлагаю вам создать сетку и соответствующее хранилище, а позже, как только вы добьетесь успеха, загрузите хранилище с данными и покажите сетку. Ниже приведен очень простой пример, в котором я получаю системные свойства из java layer в виде json Ниже приведен json

 {"OSArchitectire":"amd64","OSVersion":"6.1","JVMVersion":"1.7.0_51","JVMVendor":"Oracle Corporation","OSName":"Windows 7","JVMVendorURL":"http://java.oracle.com/"} 
  

Я сопоставляю с хранилищем следующим образом.

  success: function(response){

      var store =     Ext.create('Ext.data.Store', {
                            fields: ['JVMVendor', 'JVMVersion', 'OSName'],
                            proxy: {
                                type: 'memory',
                                reader: {
                                    type: 'json'
                                }
                            }
                        }); 

                        store.loadRawData(Ext.decode(response.responseText));
                        var grid=  Ext.create('Ext.grid.Panel', {
                                title: 'Simpsons',
                                floating: true,
                                id:'gridStore',
                                store: store,
                                columns: [{
                                    header: 'Name',
                                    dataIndex: 'JVMVendor'
                                }, {
                                    header: 'Version',
                                    dataIndex: 'JVMVersion',
                                    flex: 1
                                }, {
                                    header: 'OsName',
                                    dataIndex: 'OSName'
                                }],
                                height: 200,
                                width: 400,
                            });

                        grid.show();
}
  

Надеюсь, это поможет вам.

Комментарии:

1. Спасибо! Теперь у меня есть сетка, но я не могу заполнить ее данными, которые я получил. Что я должен поместить в dataIndex, чтобы получить правильный JSONPart? Мой JSon такой: {«dobSent»:»07/08/2014″, «success»: true, «addrSent»:»sdf», «nameSent»:»namename»}

2. Сопоставьте ваш dataIndex с вашими ключами Json. Например, doBsent , addrSent , nameSent . Ваш столбец выглядит как {заголовок:’Отправленный адрес’ , dataIndex:’Отправленный адрес’,flex:1} . Надеюсь, это поможет вам.

3. @sree У меня это не работает .. я получаю следующую ошибку: Uncaught TypeError: не удается вызвать метод ‘loadRawData’ из undefined.. Вы можете мне помочь?

4. @user3604227 Вы проверили, получаете ли вы ответ json для загрузки хранилища?

5. @Sreek521 Я получаю ответ json, но когда я добавляю некоторые новые данные, заполняя форму и отправляя, в сетке не отображается новая добавленная запись. Прямо сейчас, в методе onSubmitSuccess, у меня есть это.getBookStore().sync() и load() оба .. но это не работает..