java Servlet在发送请求后没有正确响应
所以我有一个简单的jsp网站,包含待办事项列表,我已经做了添加功能,但现在删除功能有问题
<ol class="list-group">
<c:forEach items="${todos}" var="todo">
<li class="list-group-item">${todo.toDoPosition} <a class="btn btn-light" href="${pageContext.request.contextPath}/delete-todo.do?uuidDelete=${todo.uuid}">Delete</a></li>
</c:forEach>
</ol>
每个toDoPosition都有唯一的UUID,删除函数应该通过比较toDoPosition UUID和这个发送参数来删除位置,我已经检查过这两个UUID是否相同,但它仍然不想从列表中删除位置
有一个支持删除功能的servlet
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");
}
它重定向到servlet,该servlet在doGet中有一个returnList()方法,它还有一个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方法不会从列表中删除position,因为在我将其重定向到/todo之后。应该删除的do和print列表位置仍然存在,我不知道为什么
# 1 楼答案
在deleteTodo中,传入一个Todo对象。然后在List contains方法中使用传入的Todo uuid属性,这是不正确的。您需要将Todo对象传递给contains方法,而不仅仅是它的ID,因为列表包含方法并比较对象,而不是它们的uuid属性。如果调试这段代码,您应该会看到List remove方法从未被调用。您可能还需要覆盖Todo对象中的equals,使equals对uuid属性进行比较