我使用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";
}
答案 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,它可以自动为您执行此操作。