【问题标题】:Avoid Spring MVC form resubmission when refreshing the page刷新页面时避免Spring MVC表单重新提交
【发布时间】:2015-08-27 12:02:30
【问题描述】:

我正在使用 spring MVC 将数据保存到数据库中。问题是当我刷新页面时它会重新提交 JSP 页面。 下面是我的代码sn-p

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

【问题讨论】:

    标签: spring jsp spring-mvc


    【解决方案1】:

    你必须实现Post/Redirect/Get

    一旦 POST 方法完成而不是返回视图名称,则使用 "redirect:&lt;pageurl&gt;" 发送重定向请求。

    @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。如果是这样,在redirect:/numbers 中的/numbers 之前附加该映射

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢@Evil Toad!我想在 POST 之后从调用 /addNumber 的位置重定向到同一个视图
      • 改个网址就行了(RedirectView的构造函数参数)
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多