2013-07-26 20 views
0

我試圖填充動態使用$阿賈克斯()方法.... 這裏多選擇框是我的html代碼......如何把JSONArray對象中的JSONObject內的servlet

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

這是我的servlet代碼.....

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的結果....?什麼錯? { 「大小」:[], 「循環」:[]} 我不想執行該語句 「usesfactors.put(」 大小 「jArraysize);」如果結果集rssize爲空,但這個語句被執行,即使結果集rssize沒有記錄.... 總之我希望把JSON對象(usesfactors)JSON陣列(jArraysize)當且僅當結果集rssize有記錄。

+0

最簡單的解釋是,你的sql查詢沒有返回任何東西,但是這裏沒有足夠的信息來肯定地說。 – Thomas

+0

您好托馬斯爵士,條件如果(CATEGORY_ID == 2 && ==業態201)只能返回{循環 「:無論OBJ]},但它返回{」 大小 「:[],」 循環「:[無論OBJ ]} ..我只想{循環}:[無論obj]}作爲結果。我通過執行查詢在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);