2016-06-30 82 views
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> 

回答

0

你可以試試這個

var element=$(this).children('.id'); 
var jqxhr = $.post("deleteStudent", 
    {id:$(element).text()}).done(function() { 
      $(element).remove() 
    }); 

當刪除操作成功時,此代碼將刪除學生元素。 在控制器代碼中,您不必寫入重定向,並且此方法應返回字符串數據或您可以在客戶端的done方法中使用的某個對象執行某些邏輯。

+0

不,這不起作用。想想如果控制器無法刪除,但UI學生將被刪除?這就是我要重新加載所有頁面數據的原因。 – Pavlo

+0

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