刷新页面时避免使用Spring MVC表单重新提交

时间:2015-08-27 12:02:30

标签: spring jsp spring-mvc

我使用spring MVC将数据保存到数据库中。问题是我在刷新页面时重新提交JSP页面。                      以下是我的代码段

<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";
}

3 个答案:

答案 0 :(得分:6)

您必须实施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,因为避免了重新提交

注意:我假设您在控制器级别没有任何@RequestMapping。如果是,请在/numbers

中的redirect:/numbers之前附加该映射

答案 1 :(得分:1)

您可以从处理程序方法返回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");
}

答案 2 :(得分:1)

我的answer显示了如何执行此操作,包括验证错误消息。

另一个选择是使用Spring Web Flow,它可以自动为您执行此操作。