2013-03-12 51 views
1

有人幫助..我如何可以通過使用JSON我的servlet輸出的字符串值,以我的ExtJS的..通Servlet的輸出JSON變量

我的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(); 
+0

修改您的servlet輸出:{「items」:[{「Name」:...]}並使用store/modell指向您的servlet。 – 2013-03-12 10:43:17

+0

你能解決你的問題嗎? – skuntsel 2013-03-14 16:11:51

+0

@skuntsel:還沒有.. :( – Ching29 2013-03-15 06:40:08

回答

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

用您的jsp處理數據,例如,下面的JavaScript:

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調用來一次填充您的組合框。