2015-08-27 235 views
2

我正在使用spring MVC將數據保存到數據庫中。問題是我在刷新頁面時重新提交JSP頁面。 下面是我的代碼片段刷新頁面時避免Spring MVC表單重新提交

<c:url var="addNumbers" value="/addNumbers" ></c:url> 
<form:form action="${addNumbers}" commandName="AddNumber" id="form1"> 

</<form:form> 
@RequestMapping(value = "/addNumbers", method = RequestMethod.POST) 
public String addCategory(@ModelAttribute("addnum") AddNumber num){ 
    this.numSrevice.AddNumbers(num); 
    return "number"; 
} 

回答

5

您必須實現Post-Get-Redirect

一旦POST方法完成而不是返回視圖名稱使用"redirect:<pageurl>"發送重定向請求。

@RequestMapping(value = "/addNumbers", method = RequestMethod.POST) 
public String addCategory(@ModelAttribute("addnum") AddNumber num){ 
    this.numSrevice.AddNumbers(num); 
    return "redirect:/number"; 
} 

並且有一個方法method = RequestMethod.GET那裏返回視圖名稱。我假設你不」:

@RequestMapping(value = "/number", method = RequestMethod.GET) 
public String category(){ 
    return "number"; 
} 

所以POST方法會給重定向響應瀏覽器,然後瀏覽器將使用GET方法,因爲可以避免重新提交

注意獲取重定向URL t在控制器級別有任何@RequestMapping。如果/numbers之前,所以在追加redirect:/numbers

+0

謝謝@Karthikeyan Vaithilingam。我會嘗試相同的並且回覆你! –

+0

非常感謝!我會檢查出來的。 –

0

該映射可以返回從處理程序方法的RedirectView,與URL初始化:

@RequestMapping(value = "/addNumbers", method = RequestMethod.POST) 
public View addCategory(@ModelAttribute("addnum") AddNumber num, 
         HttpServletRequest request){ 
    this.numSrevice.AddNumbers(num); 
    String contextPath = request.getContextPath(); 
    return new RedirectView(contextPath + "/number"); 
} 
+0

Thnaks @惡魔蟾蜍!我想要在POST後調用相同的視圖/ addNumber –

+0

只需更改URL(RedirectView的構造函數參數) –

0

answer展示瞭如何做到這一點,包括驗證錯誤消息。

另一種選擇是使用Spring Web Flow,它可以自動爲您執行此操作。