2013-07-26 2 views
0

Я пытаюсь заполнить несколько переключателе динамически с помощью $ .ajax() метод .... Вот мой HTML код ......Как поставить JSONArray объекта в JSONObject внутри сервлета

<select id="imageSize" name="ImageSizeId"></select> 
    <select id="circulation" name="circulationId"></select> 

Вот мой сервлет код .....

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/json;charset=utf-8"); 
    response.setHeader("Cache-Control", "no-cache"); 
    PrintWriter out = response.getWriter(); 
    JSONObject usesfactors = new JSONObject(); 
    JSONArray jArraysize = new JSONArray(); 
    JSONArray jArraycirculation = new JSONArray(); 
    Statement stmtsize,stmtcirculation; 
    ResultSet rssize,rscirculation; 
    int category_id = Integer.parseInt(request.getParameter("CategoryId")); 
    int format_id = Integer.parseInt(request.getParameter("FormatId")); 
    String size,display,des; 
    int sizeid; 



    try { 
      if(category_id == 2 && format_id == 201){ 

    // Get image size factors 

        String sql1="SELECT SizeId,Size FROM Size WHERE Category_id = "+category_id+" AND Format_id = "+format_id+" ";           
        PreparedStatement ps1 = conn.prepareStatement(sql1); 
        rssize = ps1.executeQuery() ; 

        if(rssize!=null){ 
           System.out.println("Not Null");// its printing even if resultset rssize has no records.......why? 
          while(rssize.next()) 
           { 
            System.out.println("inside resultset");    
            JSONObject jobj = new JSONObject(); 
            sizeid = rssize.getInt("SizeId"); 
            size=rssize.getString("Size"); 
            System.out.println(size); 
            jobj.put("SizeId", sizeid); 
            jobj.put("Size", size);       
            jArraysize.add(jobj); 
           } 
           usesfactors.put("Size", jArraysize); 
           rssize.close(); 
        } 
        else{ 
           System.out.println("Does not have Size factors"); 
        } 

    // Get image circulation factors 

        String sql2="SELECT circulationId,circulation FROM Circulation WHERE Category_id = "+category_id+" AND Format_id = "+format_id+" "; 
        PreparedStatement ps2 = conn.prepareStatement(sql2);      
        rscirculation = ps2.executeQuery() ;  

        if(rscirculation!=null){ 
          while(rscirculation.next()) 
           {  

            JSONObject jobj = new JSONObject(); 
            display = rscirculation.getString("DisplayName"); 
            des=rscirculation.getString("Description");            
            jobj.put("DisplayName", display); 
            jobj.put("Description", des);       
            jArraycirculation.add(jobj); 

           } 
          usesfactors.put("Circulation", jArraycirculation); 
          rscirculation.close(); 
        } 
        else{ 
           System.out.println("Does not have Circulation factors"); 
        } 

        out.println(usesfactors); 
      } 

я получаю пустой результат JSon ....? Whts не так? {"Размер": [], "Циркуляция": []} Я не хочу исполнять этот stmt "usesfactors.put (" Размер ", jArraysize);" если resultet rssize имеет значение null, но этот stmt выполняется, даже если в результирующем наборе rssize нет записей .... Короче говоря, я хочу поместить json array (jArraysize) в объект json (usesfactors) тогда и только тогда, когда в результирующем наборе rssize есть записи.

+0

Самое простое объяснение заключается в том, что ваши запросы sql ничего не возвращают, но на самом деле информации здесь недостаточно, чтобы точно сказать. – Thomas

+0

Здравствуйте, Thomas sir, условие if (category_id == 2 && format_id == 201) должно возвращать только {Circulation:: [any obj]}, но возвращает {"Size": [], "Circulation": [[any obj ]} .. Я хочу только {Циркуляция]: [любой obj]} как результат. я проверяю его вручную в workbench mysql, выполняя запрос, и он возвращает правильный результат –

ответ

0

В ответ на вопрос в коде о том, почему он получает в rssize!=null блоке см javadoc on executeQuery. В нем явно указано, что он никогда не возвращает значение null, поэтому всегда выполняется нулевая проверка. Это означает, что пустое множество результата будет пропустить цикл в этом разделе, но все-таки попало в линию

usesfactors.put("Size", jArraysize); 

Это должно быть переписано на самом деле избежать вставок на пустом возвращаемый наборе. Аналогичное изменение должно быть сделано, чтобы исправить секцию циркуляции, которая также делает неэффективную нулевую проверку.

while(rssize.next()) 
{ 
    System.out.println("inside resultset");    
    JSONObject jobj = new JSONObject(); 
    sizeid = rssize.getInt("SizeId"); 
    size=rssize.getString("Size"); 
    System.out.println(size); 
    jobj.put("SizeId", sizeid); 
    jobj.put("Size", size);       
    jArraysize.add(jobj); 
} 
if (jArraysize.length > 0) 
{ 
    usesfactors.put("Size", jArraysize); 
} 
else 
{ 
    System.out.println("Does not have Size factors"); 
} 
rssize.close(); 
0
The problem in your code might be your sql queries which are not returning any values.because i have done in my IDE in the same way you have done,only difference is that instead of getting values from database i have kept manually by iterating for loop.below is the code... 
JSONObject usesfactors = new JSONObject(); 
      JSONArray jArraysize = new JSONArray(); 
      JSONArray jArraycirculation = new JSONArray(); 

      for(int i=0;i<3;i++) 
      { 
      JSONObject jobj = new JSONObject(); 
      jobj.put("SizeId", "1"); 
      jobj.put("Size", "2");       
      jArraysize.put(jobj);     
      } 
      usesfactors.put("Size", jArraysize); 

      for(int i=0;i<3;i++) 
      { 
        JSONObject jobj = new JSONObject(); 
        jobj.put("DisplayName", "3"); 
        jobj.put("Description", "4");       
        jArraycirculation.put(jobj); 
      } 
      usesfactors.put("Circulation", jArraycirculation); 
      System.out.println(usesfactors); 
Смежные вопросы