将Servlet输出传递给JSON变量

时间:2013-03-12 08:22:55

标签: json jsp servlets extjs

有人帮忙..如何使用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();

2 个答案:

答案 0 :(得分:1)

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

Servlet方法:

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'
            });
        }
    });
});

以及jsp中的以下div

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

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

答案 1 :(得分: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()
});