Search code examples
javaservletsdynamic-data-display

Dynamic database table display using Jstl


I am trying to display database data using JSTL like this:

My dao;

public ArrayList getStudentFirstName(){
        ArrayList v = new ArrayList();
        Connection conn;
        try{
         conn =  db.getDbConnection();
         String sql = "select STU_FIRST_NAME, STU_MIDDLE_NAME, LAST_NAME from college_students_master";
         PreparedStatement ps = conn.prepareStatement(sql);
         ResultSet rs = ps.executeQuery();
         while(rs.next()){
             String firstname = rs.getString("STU_FIRST_NAME");
             String middlename = rs.getString("STU_MIDDLE_NAME");
             String lastname = rs.getString("LAST_NAME");
             v.add(firstname);
             v.add(middlename);
             v.add(lastname);
         }
        }catch(Exception asd){
            System.out.println(asd.getMessage());
        }
        return v;
    }

My servlet:

public class displayservlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
      DetailsDao dd = new DetailsDao();
      request.setAttribute("firstname", dd.getStudentFirstName());
        RequestDispatcher view = request.getRequestDispatcher("DemoJSP.jsp");
        view.forward(request, response);
    }
}

My JSP:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    </head>
    <body>
        <b>The Demo Object Names Are:-
            <br>

            <table>
                <c:forEach items="${firstname}" var="firstname">
                    <tr>
                        <td>${firstname}</td>
                    </tr>
                </c:forEach>

            </table>
    </body>
</html>

My Display:

enter image description here

Both The first Name and the MiddleName are on the same Column. What is the best way to display a dynamic table using Jstl. an Example would also be Appreciated.

EDIT: My expected Output Is: I have added an extra One column: enter image description here


Solution

  • Try this,

    create a new Bean class named as Name

    public class Name
    {
        private String firstName;
        private String middleName;
        private String lastName;
    
       // relavent getter setter
    }
    

    change your method getStudentFirstName()

    public ArrayList getStudentFirstName(){
            ArrayList<Name> v = new ArrayList<Name>();
            Connection conn;
            try{
             conn =  db.getDbConnection();
             String sql = "select STU_FIRST_NAME, STU_MIDDLE_NAME from college_students_master";
             PreparedStatement ps = conn.prepareStatement(sql);
             ResultSet rs = ps.executeQuery();
             Name name = null;
             while(rs.next()){
                 name = new Name();
                 name.setFirstName(rs.getString("STU_FIRST_NAME")); //set your firstName
                 name.setMiddleName(rs.getString("STU_MIDDLE_NAME")); //set your MiddleName
                 name.setLastName(rs.getString("LAST_NAME")); //set your LastName
                 v.add(name); 
             }
            }catch(Exception asd){
                System.out.println(asd.getMessage());
            }
            return v;
        }
    

    change your c:forEach Loop

    <table border="1">
      <thead>
        <td>
          <th>First Name</th>
          <th>Middle Name</th>
          <th>Last Name</th>
        </td>
      </thead>
      <tbody>
         <c:forEach items="${firstname}" var="name">
           <tr>
             <td>${name.firstName}</td>
             <td>${name.middleName}</td>
             <td>${name.lastName}</td>
           </tr>
         </c:forEach>
      </tbody>
    </table>