首页 > 解决方案 > 在 java servlet 中运行覆盖的 doPost 方法时遇到问题

问题描述

下面的代码来自jsp文件。

<table class="table table-striped table-hover table-responsive ezoo-datatable">
        <thead>
            <tr>
                <th class="text-center">Schedule ID</th>
                <th class="text-center">Feeding Time</th>
                <th class="text-center">Recurrence</th>
                <th class="text-center">Notes</th>
                <th class="text-center">Food</th>
                <th class="text-center">Animal ID</th>
                <th></th>
            </tr>
        </thead>
        <% int counter = 0; %>
        <tbody>
            <form action="feedingSchedules" method="post">
                <c:forEach var="schedule" items="${feeding_schedules}">
                <tr>
                    <td><c:out value="${schedule.schedule_ID}" /></td>
                    <td><c:out value="${schedule.feeding_time}" /></td>
                    <td><c:out value="${schedule.recurrence}" /></td>
                    <td><c:out value="${schedule.notes}" /></td>
                    <td><c:out value="${schedule.food}" /></td>
                    <td><c:out value="${schedule.animalID}" /></td>
                    <td><button class="btn-danger-stale" name="btn${counter}" value="val${counter}">Delete Schedule</button></td>
                    <% counter++; %>
                </tr>
            </c:forEach>
            <input type="hidden" name="numSchedules" value="${counter}"/>
            </form>
        </tbody>
    </table>    

此代码构建一个数据表。我有一个 servlet,通过调用 dao 方法从数据库中获取数据来填充表。我需要向表中添加按钮以删除与按钮对应的行。我有按钮,但我不确定如何让它们执行实际删除。

@WebServlet(description = "This servlet is the main interface into the Feeding Schedules   System", urlPatterns = { "/feedingSchedules" })
public class FeedingSchedulesServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws    ServletException, IOException {

    // Grab a list of Animals from the Database
    FeedingScheduleDAO dao = DAOUtilities.getFeedingScheduleDao();
    List<FeedingSchedule> schedules = dao.getAllSchedules();

    // Populate the list into a variable that will be stored in the session
    request.getSession().setAttribute("feeding_schedules", schedules);

    request.getRequestDispatcher("feedingScheduleHome.jsp").forward(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    FeedingScheduleDAO dao = DAOUtilities.getFeedingScheduleDao();
    List<FeedingSchedule> schedules = dao.getAllSchedules();
    //Get Parameters
    System.out.println("got here");
    int count = Integer.parseInt(request.getParameter("numSchedules"));
    for(int i = 0; i < count; i++) {
        String btn = null;
        btn = request.getParameter("btn" + i);
        if(btn == ("val" + i)) {
            System.out.println("got here");
            // call delete method from DAO
            try {
                dao.deleteSchedule(schedules.get(i));
                request.getSession().setAttribute("message", "Schedule successfully deleted");
                request.getSession().setAttribute("messageClass", "alert-success");
                response.sendRedirect("feedingSchedules");
            } catch (Exception e) {
                e.printStackTrace();
                request.getSession().setAttribute("message", "There was a problem deleting the schedule at this time");
                request.getSession().setAttribute("messageClass", "alert-danger");
                request.getRequestDispatcher("feedingScheduleHome.jsp").forward(request, response);
            }
        }
    }
}

}

上面的代码是servlet。当我单击按钮时,我在覆盖的 doPost 方法中放置的打印行不会显示在控制台中,因此我不相信该方法被正确调用。有谁知道我做错了什么?我花了几个小时盯着这个,可以用一些新鲜的眼睛。

标签: javahtmljspservletsjstl

解决方案


分配id给你的form例如

<form id="myForm" action="feedingSchedules" method="post">

并更换

<button class="btn-danger-stale" name="btn${counter}" value="val${counter}">Delete Schedule</button>

<button class="btn-danger-stale" name="btn${counter}" value="val${counter}" onclick="document.getElementById('myForm').submit();">Delete Schedule</button>

或者

id如上所述为您的表单以及如下所述的按钮分配一个:

<button id="myButton" class="btn-danger-stale" name="btn${counter}" value="val${counter}">Delete Schedule</button>

并在您的 jsp 文件中添加以下 javascript:

var form = document.getElementById("myForm");

document.getElementById("myButton").addEventListener("click", function () {
  form.submit();
});

推荐阅读