0

I am trying to retrieve data from my database and show it in a table using jsp and servlet. I created the table and retrieve the data from the database but it is not showing in the table. I am not sure what is wrong. Here is my code so far:

JSP Page:

<h1>List of Cars in Inventory</h1>
        <form name="table" action="Inventory" method="get">
        <table>
            <tr>
                <td>Car ID</td>
                <td>Car Make</td>
                <td>Car Model</td>
                <td>Car Year</td>
                <td>Transmission Type</td>
                <td>Rate Per Mile</td>
                <td>Rate Per Day</td>
                <td>Availability</td>
            </tr>

            <c:forEach var="vehicle" items="${list}">
                <tr>
                    <td><c:out value="${vehicle.id}"/></td>
                    <td><c:out value="${vehicle.make}"/></td>
                    <td><c:out value="${vehicle.model}"/></td>
                    <td><c:out value="${vehicle.year}"/></td>
                </tr>
            </c:forEach>

        </table>
        </form>

Servlet Page:

public class Inventory extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        List<Vehicles> list = InventoryService.getListOfVehicles();
        request.setAttribute("list", list);
        request.getRequestDispatcher("inventory.jsp").forward(request,response);
    }

Database Class:

public static List<Vehicles> getListOfVehicles()
    {
        Vehicles vehicles = new Vehicles();
        List<Vehicles> vehicleList = new ArrayList<>();
        try
        {
            Connection conn = DBConnection.getConnection();

            String query = "SELECT * FROM Vehicles";
            PreparedStatement stmt = conn.prepareStatement(query);
            ResultSet rs = stmt.executeQuery();

            while(rs.next())
            {
                vehicles.setId(rs.getInt("id"));
                vehicles.setMake(rs.getString("make"));
                vehicles.setModel(rs.getString("model"));
                vehicles.setYear(rs.getString("year"));
                vehicles.setRatePerMile(rs.getString("ratepermile"));
                vehicles.setRatePerDay(rs.getString("rateperday"));
                vehicles.setTaken(rs.getString("taken"));
                vehicleList.add(vehicles);
            }
        }
        catch (Exception e)
        {
            System.out.println(e);
        }

        return vehicleList;
    }
Nasim Ahmed
  • 235
  • 2
  • 17
  • Check that the URL in the address bar is the URL of your servet. Use your debugger. Or at the very least println statements in the code. Check that your servlet is executed. Check what happens in your database class. Check if the query returns data. Check if the list is empty or not. Check if the generated HTML is right. This is a programmer's daily job. Note that you're storing a single Vehicles instance several times in your Database class. And BTW, the class should be named Vehicle, not Vehicles. An instance represents 1 vehicle, not many vehicles. – JB Nizet Dec 04 '16 at 15:01

1 Answers1

0

You should add a new created object to the vehicleList in the while-block.

public static List<Vehicles> getListOfVehicles()
{
    // remove from here
    //Vehicles vehicles = new Vehicles();

    List<Vehicles> vehicleList = new ArrayList<>();
    try
    {
        Connection conn = DBConnection.getConnection();

        String query = "SELECT * FROM Vehicles";
        PreparedStatement stmt = conn.prepareStatement(query);
        ResultSet rs = stmt.executeQuery();

        while(rs.next())
        {
            //create object here
            Vehicles vehicle = new Vehicles();

            vehicle.setId(rs.getInt("id"));
            vehicle.setMake(rs.getString("make"));
            vehicle.setModel(rs.getString("model"));
            vehicle.setYear(rs.getString("year"));
            vehicle.setRatePerMile(rs.getString("ratepermile"));
            vehicle.setRatePerDay(rs.getString("rateperday"));
            vehicle.setTaken(rs.getString("taken"));
            vehicleList.add(vehicle);
        }
    }
    catch (Exception e)
    {
        System.out.println(e);
    }

    return vehicleList;
}

Consider also renaming your JavaBean class from Vehicles to singular Vehicle

code_angel
  • 1,537
  • 1
  • 11
  • 21