Сервлет не отвечает должным образом после отправки запроса - PullRequest
0 голосов
/ 20 марта 2019

так что у меня есть этот простой веб-сайт в jsp, который содержит список задач, я уже сделал функцию добавления, но теперь есть проблема с функцией удаления.

  <ol class="list-group">
            <c:forEach items="${todos}" var="todo">
                <li class="list-group-item">${todo.toDoPosition} &nbsp; <a class="btn btn-light" href="${pageContext.request.contextPath}/delete-todo.do?uuidDelete=${todo.uuid}">Delete</a></li>
            </c:forEach>
        </ol>

Каждый toDoPosition имеет уникальный UUID, и функция удаления должна удалять позицию, сравнивая uUid toDoosition с этим параметром send in, я уже проверил, совпадают ли эти два uuid, и все же не хочет удалять позицию из список.

Существует сервлет, поддерживающий функцию удаления

private TodoService todoService = new TodoService();


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println(request.getParameter("uuidDelete") + "Should be deleted now");
    todoService.deleteTodo(new Todo(request.getParameter("uuidDelete")));
    response.sendRedirect("/todo.do");

}

Он перенаправляет сервлет, у которого есть метод returnList () в doGet, и у него также есть метод doPost, который отвечает за добавление нового todo:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.getSession().setAttribute("todos", todoService.returnList() );
    request.getRequestDispatcher("/WEB-INF/views/todo.jsp").forward(request, response);
}
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if (request.getParameter("newTodo") != null) {
        todoService.addTodo(new Todo(request.getParameter("newTodo")));
    }
    response.sendRedirect("/todo.do");
}

И услуга удаления:

    protected List<Todo> toDoList = new ArrayList<>();


public List<Todo> returnList(){
    return toDoList;
}

public void addTodo(Todo toDo) {
    toDoList.add(toDo);
    System.out.println(toDo.uuid);
}

public void deleteTodo(Todo toDo) {
    if(toDoList.contains(toDo.uuid)) {
        toDoList.remove(toDo);
    }

}

После нажатия кнопки «Удалить» отправляется запрос с UUID, обновление сайта, но в списке нет изменений. Кажется, что метод delete не удаляет позицию из списка, потому что после того, как я перенаправил его в /todo.do и позиция списка печати, которую нужно удалить, все еще здесь, и я понятия не имею, почему

1 Ответ

1 голос
/ 20 марта 2019

В deleteTodo вы передаете объект Todo. Затем вы используете переданный в Todo атрибут uuid в методе «Список содержит», который является неправильным. Вам необходимо передать объект Todo в метод contains, а не только в его идентификатор, поскольку список содержит метод и сравнивает объекты, а не их атрибут uuid. Если вы отлаживаете этот код, вы должны увидеть, что метод удаления списка никогда не вызывается. Вам также может понадобиться переопределить equals в вашем объекте Todo, чтобы это сработало, заставив equals сделать сравнение атрибута uuid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...