Simple pass of JSON to Datatable via response.setAttribute()

Simple pass of JSON to Datatable via response.setAttribute()

macksigepmacksigep Posts: 6Questions: 3Answers: 0
edited March 2017 in Free community support

Hey all,

I have successfully constructed a JSON string and have it prepared to be passed to my .jsp file.The issue is, I cannot get the .jsp file with the data table to load. The file will open when I run the stand alone .jsp file, or when I do a request.getRequestDispatcher("/resources/runners/runnerHistory.jsp"); call. But not when I am trying to pass JSON with Ajax or .setAttribute().

I am at a loss of how to get this page, and table to load with a JSON string.

This is the .jsp I am trying to load...

$(document).ready(function() {
            var table;
            //Pretty much the main method of javascript (with jquery)
            $(function() {////////////////////main function////////////////////////////
                //Table was given the id table_users
                //Create datatable from table
                table = $('#table_runners').DataTable(
                {
                 //Url is from table_user class
                "ajax" : "${pageContext.request.contextPath}/runnerhistorycontroller",
                //Setting columns to get specific data from json response
                "columns" : [
                    {
                        data : null,
                        className : "center",
                        defaultContent : 
                            '<button onclick= "editFunction();" id="btn_editusermodal" class = "btn btn-primary" >edit</button><button onclick=" " id="btn_deleteusermodal" class = "btn btn-primary">delete</button><button onclick=" " id="btn_runnerhistorymodal" class = "btn btn-primary">history</button>'
                        },
                        {
                          "data" : "runnerID" , "defaultContent": "<i>Not set</i>"},
                         
                          {"data" : "runnerFName", "defaultContent": "<i>Not set</i>"},
                        {"data" : "runnerLName", "defaultContent": "<i>Not set</i>"},
                        //ensure that fields match
                        //from column mapping in servlet
                        {"data" : "raceName", "defaultContent": "<i>Not set</i>"},
                        {"data" : "raceTime", "defaultContent": "<i>Not set</i>"}
                        ],
                    }

This is the servlet that pulls the query and constructs JSON

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        String json = request.getParameter("rid");
        //String ridIn = (String)request.getAttribute("rid");
        
         String runnerID = "{\"runnerID\":"+json+"}";
        System.out.println(runnerID + " rid as json string new");
        
        
        //String json = request.getParameter("rid");
        RunnerHistory r = null;
         Gson gson = new Gson();
         r = gson.fromJson(runnerID, RunnerHistory.class);
        //System.out.println(r + " test JSON in ");
        
        
        List<RunnerHistory> runners;
        CallableStatement callStmt = null;
        ResultSet myRS = null;
        

        try (Connection conn = ConnectionManager.getConnection()) {
              String  ridParam  =  r.getRunnerID();
            runners = new ArrayList<RunnerHistory>();
            callStmt = conn.prepareCall("{call get_runnerhistory(?)}");
            callStmt.setString(1, ridParam);
            callStmt.execute();
            myRS = callStmt.executeQuery();
                    
            while (myRS.next()) {
             
                String  rid = myRS.getString("runnerID");
                String rfn = myRS.getString("runnerFName");
                // runners.add(runnerFName);
                String rln = myRS.getString("runnerLName");
                // runners.add(runnerFName + " " + runnerLName);
                String rn = myRS.getString("raceName");
                // runners.add(runnerAge);
                String rt = myRS.getString("raceTime");

                // runners.add(runnerClass);
                r = new RunnerHistory(rid, rfn, rln, rn, rt); 
                runners.add(r);
            }
            
            /*for(RunnerHistory i: runners){
                System.out.println(i + "list2");
            }*/
            // Gson gsonOut = new Gson();
             // String jsonObject=new Gson().toJson(r);
             // System.out.println(jsonObject + " <---JSON");
              
               Gson gsonOut = new Gson();
               DataTable table = new DataTable();
               table.setData(runners);
               String jsonObject = gsonOut.toJson(table); 
              System.out.println(jsonObject + " <---JSON");
              
               //request.setAttribute("json",jsonObject);
              //RequestDispatcher rd = request.getRequestDispatcher("/json/table/getrunnerhistory");
                //RequestDispatcher rd = request.getRequestDispatcher("/resources/runners/runnerHistory.jsp");
                
                //rd.forward(request,response);
              System.out.println("request done");
               
               request.setAttribute("runIDout",jsonObject);
                RequestDispatcher rd = request.getRequestDispatcher("/runnerhistorycontroller");
                rd.forward(request,response);
               

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

This is another servlet that controls the call to and passes the constructed JSON to the .jsp holding the table. Even if I get rid of the .getRequestDispatcher and rely on the ajax call the .jsp file from above still willl not load!

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String convertJSON = (String)request.getAttribute("runIDout");
        System.out.println(convertJSON + "in controller");
         //String json = "{\"runnerID\":"+convertJSON+"}";
          Gson gsonOut = new Gson();
           DataTable table = new DataTable();
           table.setData(convertJSON);
           String json = gsonOut.toJson(table); 
          
          request.setAttribute("rid",convertJSON);
        RequestDispatcher rd = request.getRequestDispatcher("/resources/runners/runnerHistory.jsp");
         rd.forward(request,response);
         PrintWriter out = response.getWriter();
         out.print(json);
         out.flush();
    }

Replies

  • serio72serio72 Posts: 3Questions: 1Answers: 0

    Hi macksigep,

    sorry for late response but I'm new on community.
    Have you tried with trigger on div where you load jsp?

  • allanallan Posts: 63,180Questions: 1Answers: 10,411 Site admin

    If "${pageContext.request.contextPath}/runnerhistorycontroller", is not returning JSON, then you'd probably need to ask in a Java support forum.

    Allan

This discussion has been closed.