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
這就是爲什麼控制器應該返回一些字符串,如「成功」或「失敗」,並藉助它可以確定學生是否被刪除。如果控制器的迴應是成功的,那麼您將刪除學生,否則您不會在客戶端刪除學生 –