【问题标题】:Pass Servlet output to JSON variable将 Servlet 输出传递给 JSON 变量
【发布时间】:2013-02-27 16:13:09
【问题描述】:

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

【问题讨论】:

  • 修改您的 servlet 以输出:{"items":[{"Name": ... ]} 并使用存储/模型指向您的 servlet。
  • 你能解决你的问题吗?
  • @skuntsel: 还没有.. :(
  • 那么现在的问题是什么?
  • @skuntsel: 还是一样.. 我无法将 JSON 数据从 servlet 传递到我的 JSP 页面.. :(( 有点令人沮丧..

标签: json jsp servlets extjs


【解决方案1】:

你在寻找这样的东西吗?

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

【讨论】:

    【解决方案2】:

    您只需要从您的 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'
                });
            }
        });
    });
    

    以及您的 jsp 中的以下 div

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 2013-03-22
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      • 2011-04-16
      相关资源
      最近更新 更多