Question

My goal is when image button is click, it will go through servlet first then database object to retrieve data from database and the result will display in next jsp page.

Usually when I need to display data from database, I will ask user to input the value first and call out the servlet to retrieve data from database and then request dispatcher to the next page.

However, now I want the user to click the image instead of input any value. It can go to second.jsp but cannot display the data.

Is there something wrong with my codes.. or an image when click can't go to servlet?

Help will be appreciate. Thank you!

Below are my codes... :)

At web.xml

 <servlet>
<display-name>PendingOrderServlet</display-name>
<servlet-name>PendingOrderServlet</servlet-name>
<servlet-class>servlet.PendingOrderServlet</servlet-class>
 </servlet>
   <servlet-mapping>
    <servlet-name>PendingOrderServlet</servlet-name>
   <url-pattern>/PendingOrderServlet</url-pattern>
  </servlet-mapping>

At first.jsp

<SCRIPT type="text/javascript">
function doNextPage {
location.href = "PendingOrderServlet";}
</SCRIPT>
<img src="images/image.png" onclick="doNextPage();">

At PendingOrderServlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    
        PendingOrderDAO pod = new PendingOrderDAO();
        request.setAttribute("order", pod.getPendingOrders());

        RequestDispatcher view = request
                .getRequestDispatcher("second.jsp");
        view.forward(request, response);
}

At PendingOrderDAO

public ArrayList getPendingOrders() {
    ArrayList<OrderBean> listpendingorder = new ArrayList<OrderBean>();
    try {
        currentCon = ConnectionManager.getConnection();
        Statement statement = currentCon.createStatement();

        ResultSet rs = statement
                .executeQuery("SELECT fborders.fbOrderId, fbmenu.fbMenuName, fborders.quantity, fborders.date, fborders.time, customer.custNRIC FROM fborders INNER JOIN fbmenu ON fborders.fbMenuId=fbmenu.fbMenuId INNER JOIN customer ON customer.custId=fborders.custId WHERE fborders.status='pending'");
        OrderBean OrderBean = null;
        while (rs.next()) {
            OrderBean = new OrderBean();
            OrderBean.setFbOrderId(rs.getInt("fbOrderId"));
            OrderBean.setFbMenuName(rs.getString("fbMenuName"));
            OrderBean.setQuantity(rs.getString("quantity"));
            OrderBean.setDate(rs.getString("date"));
            OrderBean.setTime(rs.getString("time"));
            OrderBean.setCustNRIC(rs.getString("custNRIC"));
            listpendingorder.add(OrderBean);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

    return listpendingorder;
}

At second.jsp

    <table class="table tableshow">
                    <thead>
                        <tr>
                            <th>ffOrder ID</th>
                            <th>Menu</th>
                            <th>Quantity</th>
                            <th>Date</th>
                            <th>Time</th>
                            <th>Customer NRIC</th>
                            <th>.....</th>
                        </tr>
                    </thead>

                    <tbody>
                            <c:forEach items="${pendingorder}" var="order">
                    <tr>
                        <td>${pendingorder.getFbOrderId()}</td>
                        <td>${pendingorder.getFbMenuName()}</td>
                        <td>${pendingorder.getQuantity()}</td>
                        <td>${pendingorder.getDate()}</td>
                        <td>${pendingorder.getTime()}</td>
                        <td>${pendingorder.getCustNRIC()}</td>

                    </tr>
                </c:forEach>

                    </tbody>

                </table>
Was it helpful?

Solution

In Servlet. You passed attribute named 'order' but in JSP you used attribute named 'pendingorder'.

Servlet Code:

request.setAttribute("order", pod.getPendingOrders());

Correct JSP:

<c:forEach items="${order}" var="item">
    <tr>
                    <td>${item.getFbOrderId()}</td>
                    <td>${item.getFbMenuName()}</td>
                    <td>${item.getQuantity()}</td>
                    <td>${item.getDate()}</td>
                    <td>${item.getTime()}</td>
                    <td>${item.getCustNRIC()}</td>

    </tr>
</c:forEach>

NOTE: You can use ${item.fbOrderId} Instead of ${item.getFbOrderId()}

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top