Dynamic database table display using Jstl

ErrorNotFoundException picture ErrorNotFoundException · Sep 30, 2013 · Viewed 33.8k times · Source

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

Answer

newuser picture newuser · Sep 30, 2013

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>