0
我用Spring MVC和JSP做了一个小控制器,它显示了Student对象的列表。在这个控制器中,我也做了处理POST请求的方法。 POST方法传递学生ID参数和控制器应删除具有此ID的学生。Spring MVC jQuery重定向不起作用
这工作正常,但删除后我希望页面重新加载自己而无需用户页面重新加载点击,但这是行不通的。我在POST处理程序中尝试了"redirect:students"
,并在调试器中看到它传递给GET方法,但是当我在浏览器中检查获取响应时 - 它看起来像Student没有被删除,所以页面看起来与POST之前相同 - 这是问题。当我在浏览器中重新加载页面时,它显示更新的数据(没有删除学生)。 POST方法通过jQuery无页面形式发送,我不使用AJAX。
请帮助POST请求后刷新页面。
控制器:
@RequestMapping(value = "/students", method = RequestMethod.GET)
public ModelAndView home() {
ModelAndView mv = new ModelAndView("students");
mv.addObject("studentsList", studentDAO.getStudents());
return mv;
}
@RequestMapping(value = "/deleteStudent", method = RequestMethod.POST)
public String deleteStudent(Model model, @RequestParam("id") String idString) {
studentDAO.deleteStudent(Long.parseLong(idString));
return "redirect:students";
}
JQuery的发布
$.post("deleteStudent",
{id:$(this).children('.id').text()})
JSP
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<title>Students</title>
<link href="<c:url value="/resources/css/students.css" />" rel="stylesheet">
</head>
<body>
<h1>
Students list
</h1>
<div class="table">
<div class="row studentsHeader">
<div class="cell id">ID</div>
<div class="cell">First Name</div>
<div class="cell">Last Name</div>
<div class="cell">Birth Date</div>
</div>
<c:if test="${not empty studentsList}">
<c:forEach var="student" items="${studentsList}">
<div class="row studentData">
<div class="cell id">${student.id}</div>
<div class="cell firstName">${student.firstName}</div>
<div class="cell lastName">${student.lastName}</div>
<div class="cell birthdate"><fmt:formatDate pattern="MM/dd/yyyy" value="${student.birthdate}" /></div>
</div>
</c:forEach>
</c:if>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="<c:url value="/resources/js/students.js" />"></script>
</body>
</html>
不,这不起作用。想想如果控制器无法删除,但UI学生将被删除?这就是我要重新加载所有页面数据的原因。 – Pavlo
这就是为什么控制器应该返回一些字符串,如“成功”或“失败”,并借助它可以确定学生是否被删除。如果控制器的回应是成功的,那么您将删除学生,否则您不会在客户端删除学生 –