1

有人帮助..如何使用 JSON 将我的 Servlet 输出的字符串值传递给我的 ExtJS ..

我的 Servlet 有这样的输出;

[{"Name":"No Top Specified"},
{"Name":"No Bottom Specified"},
{"Name":"13KG F/B HAPPY PREMIUM TOP"},
{"Name":"13KG F/B SHARB B TOP"},
{"Name":"13KG F/B TROPIX TOP"},
{"Name":"13KG F/B BOTTOM 351.00"},
{"Name":"13KG F/B SHARBATLY BOTTOM"},
{"Name":"13KG F/B TROPIX BOTTOM"},
{"Name":"14KG F/B ORGANIC TOP"},
{"Name":"14KG F/B BOTTOM"}]

这些数据来自我的数据库。我想知道我的 ExtJS 的语法是什么,以使这些数据成为我的 ExtJS 驱动的组合框的数据。谢谢。:)

这是我的服务方式..

JSONArray jsonarray = new JSONArray();
ResultSetMetaData rsmd = rs.getMetaData();

int y = 1;
while(rs.next()){
int numColumns = rsmd.getColumnCount();
JSONObject obj = new JSONObject();

for (int i=1; i<numColumns+1; i++) {
String column_value = rs.getString(i);
obj.put("Name", column_value);
response.setContentType("application/jsons");
response.setCharacterEncoding("UTF-8");

}

jsonarray.put(obj).toString();      

y++;
}   
System.out.println(jsonarray);
response.getWriter().println(jsonarray);
rs.close();                                                              
pst.close();
4

2 回答 2

1

您只需要从您的 servlet 返回一个正确的 JSON,然后在某个地方使用 ExtJS 处理它。

小服务程序方法:

public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException { 
    List<Data> data = ...;//populate data from your database in key-value pairs
    String json = new Gson().toJson(data);//or generate JSON the other way
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
}

数据类:

public class Data {
    private String label;//getter+setter
    private String value;//getter+setter
}

使用例如以下 javascript 处理 jsp 中的数据:

Ext.onReady(function() {
    Ext.Ajax.request({
        url: '/servleturl',
        success: function(response){
            var states = Ext.decode(response.responseText);
            var values = Ext.create('Ext.data.Store', {
                fields: ['label', 'value'],
                data : states
            });
            var combo = Ext.create('Ext.form.ComboBox', {
                fieldLabel: 'Choose your shape: ',
                store: values,
                displayField: 'value',
                valueField: 'label',
                queryMode: 'local',
                renderTo: 'wrapper'
            });
        }
    });
});

以及div您的jsp中的以下内容:

<div id="wrapper"></div>

或者,您可以“一次”填充您的组合框,当您最初呈现您的视图时,通过使用request.setAttribute(data)并稍后在您的 jsp 中处理它,而不是通过对另一个 servlet 的 AJAX 调用。

于 2013-03-12T15:41:22.937 回答
0

你在寻找这样的东西吗?

var servlet = Ext.create('Ext.data.Store', {
    fields: ['Name'],
    data : [
        {"Name":"No Top Specified"},
        {"Name":"No Bottom Specified"},
        {"Name":"13KG F/B HAPPY PREMIUM TOP"},
        {"Name":"13KG F/B SHARB B TOP"},
        {"Name":"13KG F/B TROPIX TOP"},
        {"Name":"13KG F/B BOTTOM 351.00"},
        {"Name":"13KG F/B SHARBATLY BOTTOM"},
        {"Name":"13KG F/B TROPIX BOTTOM"},
        {"Name":"14KG F/B ORGANIC TOP"},
        {"Name":"14KG F/B BOTTOM"}
    ]
});

Ext.create('Ext.form.ComboBox', {
    fieldLabel: 'Choose State',
    store: servlet,
    queryMode: 'local',
    displayField: 'Name',
    valueField: 'Name',
    renderTo: Ext.getBody()
});
于 2013-03-12T10:07:57.610 回答