Tell me more ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I need to pass some items from my database to the web page. For this i used json object to pass the items from servlet to the jquery. But where i getting the problem is,

  • If the database contains more element
  • Then I obviously need to use the ArrayList.
  • When I use ArrayList I don't know to pass the elements through JSON.

My code is:

    PrintWriter out = response.getWriter();
    response.setContentType("text/html");
    response.setHeader("Cache-control", "no-cache, no-store");
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Expires", "-1");

    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "GET");
    response.setHeader("Access-Control-Allow-Headers", "Content-Type");
    response.setHeader("Access-Control-Max-Age", "86400");

    Gson gson = new Gson();
    JsonObject myObj = new JsonObject();

    ArrayList<Commenter> commentInfo;
    try {
        commentInfo = commenting(uname,message,itemId,albumId);
        JsonElement commentObj = gson.toJsonTree(commentInfo);
        boolean nonNullElemExist= true;
        for (Commenter s: commentInfo) {
            if (s == null) {
                nonNullElemExist = false;
                break;
            }
        }
    if(nonNullElemExist == false){
        myObj.addProperty("success", false);
    }
    else {
        myObj.addProperty("success", true);
    }
    myObj.add("commentInfo", commentObj);
    out.println(myObj.toString());                   // I think problem is in this statement

    out.close();
    } catch (ClassNotFoundException | SQLException e) {
        System.out.println( "Error --> " + displayErrorForWeb(e));
    }

And the method is:

   private ArrayList<Commenter> commenting(String uname,String message,int itemId,int albumId) throws ClassNotFoundException, SQLException {
   ArrayList<Commenter> commentList = new ArrayList<Commenter>();
   Connection conn = null; 
   conn=prepareConnection();
   PreparedStatement stmt = null;    
   String sql = null;

    try {     
        StringBuilder sb1=new StringBuilder(1024);
        sb1.append("insert into ").append(uname.trim()).append("comments values(?,?,?)");
        String sql1=sb1.toString();
        PreparedStatement stmt1 = conn.prepareStatement(sql1);
        stmt1.setString(1,uname);
        stmt1.setString(2,message);
        stmt1.setInt(3,itemId);

        StringBuilder sb=new StringBuilder(1024);
        sb.append("select * from ").append(uname.trim()).append("comments");
        sql=sb.toString();
        stmt = conn.prepareStatement(sql);
       ResultSet rs = stmt.executeQuery();

        while(rs.next()){
            Commenter comment = new Commenter();
            comment.setUname(rs.getString("uname").trim());
            comment.setComment(rs.getString("comment").trim());
            commentList.add(comment);
           }                                                                        

        rs.close();                                                              
        stmt.close();                                                            
        stmt = null;                                                             


        conn.close();                                                            
        conn = null;                                                  

    }                                                              
    catch(Exception e){System.out.println( "Error --> " + displayErrorForWeb(e));}                     

    finally {                                                      

        if (stmt != null) {                                           
            try {                                                        
                stmt.close();                                               
            } catch (SQLException sqlex) {                               
                System.out.println( "Error --> " + displayErrorForWeb(sqlex));         
            }                                                            

            stmt = null;                                           
        }                                                       

        if (conn != null) {                                     
            try {                                                  
                conn.close();                                         
            } catch (SQLException sqlex) {                         
                System.out.println( "Error --> " + displayErrorForWeb(sqlex));
            }                                                      

            conn = null;                                           
        }                                                       
    }             

    return commentList;

} 

And the jquery is :

  $.ajax({
       type: "GET",
        url: "Comments",
        data:'comm='+encodeURIComponent(comm)+'&'+'data-id='+encodeURIComponent(dataid)+'&'+'data-alid='+encodeURIComponent(dataalid),
        dataType: "json",
        success: function( data, textStatus, jqXHR) 
        {
            if(data.success)
            {
       /*   $.each(data, function(i, item)
                     {*/

                    var newcommhtml = '<div id="c0'+thecid+'" class="cnew clearfix"> <section class="c-author">';
                    newcommhtml = newcommhtml + '<h3>Anonymous</h3>';
                    newcommhtml = newcommhtml + '<span class="pubdate">'+month+' '+day+', '+year+'</span> </section>';
                    newcommhtml = newcommhtml + '<section class="c-content">';
                    newcommhtml = newcommhtml + '<img src="images/green-avatar.png" alt="avatar" width="80" height="80" class="ava">';
                    newcommhtml = newcommhtml + '<p>'+nl2br(data.commentInfo.comment)+'   '+nl2br(data.commentInfo.itemId)+'</p> </section></div>';
                    /*newcommhtml = newcommhtml + '<p>'+nl2br(item.commentInfo.comment)+'   '+nl2br(item.commentInfo.itemId)+'</p> </section></div>';
                    });
                    */                  
                    var thelm = "#c0"+thecid;
                    commwrap.append(newcommhtml);
                    $(thelm).hide().fadeIn('slow');

                    setTimeout(function() { $(thelm).addClass('green'); }, 800);

                    $("#comm").val("");
                    thecid++;

                    if(errorspan.html() != null) {
                        errorspan.remove();
                    }
            }

          },
     error: function(jqXHR, textStatus, errorThrown)
      {
         alert("error"+errorThrown);
         console.log("Something really bad happened " + textStatus);
      },
});

If I use $each() success block wasn't work at all.

Please any one tell me how to do the stuff for this case.........thanks.......

share|improve this question

2 Answers

Convert ArrayList to json using new Gson().toJson(object) method. Now you will get a jsonarray of jsonobjects then you can pass it like json to server and vice versa.

Array list is a collection so follow this

Type collectionType = new TypeToken<Collection<Integer>>(){}.getType();
Collection<Integer> ints2 = gson.fromJson(json, collectionType);

gson user guide

for displaying json using jquery follow this link. Best way to display data via JSON using jQuery

share|improve this answer
 
can you give an example. I can't understand your answer... –  James Robinson Feb 12 at 12:19
 
Type listOfTestObject = new TypeToken<ArrayList<TestObject>>(){}.getType(); String s = gson.toJson(list, listOfTestObject); ArrayList<TestObject> list2 = gson.fromJson(s, listOfTestObject); –  Parvathy Feb 12 at 12:26
 
It is not working for me java.lang.reflect.Type listOfTestObject = new TypeToken<ArrayList<Commenter>>(){}.getType();String str = gson.toJson(commentInfo, listOfTestObject);JsonElement commentObj = gson.toJsonTree(str); and myObj.add("commentInfo", commentObj);out.println(myObj.toString()); Is it correct. –  James Robinson Feb 12 at 12:48
 
did you try without toJsonTree means use toJson only? –  Parvathy Feb 12 at 12:52
 
toJson is must need assignment to a string. JsonObject.add() is not allows any string. It needs JsonElement. So i can't use toJson directly... –  James Robinson Feb 12 at 13:18

Use XStream to convert your object to JSON. It's very simple. You can get a tutorial from it's site. XStream has various drivers. For JSON, you will have to use JettisonMappedXmlDriver.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.