解决刷新jsp页面重复提交数据的问题

假如我们需要使用 controller层的 addsave方法向 worklist页面传递参数,jsp 页面接收参数的方式如下图:

<span style="color: red">${info}</span>

controller层代码:

@RequestMapping(value = "addsave")
    public String addsave(Workorder workorder, Model model) {
        workorder.setCreateDate(new Date());
        if (workorderService.add(workorder)) {
            model.addAttribute("info", "保存成功"); //提示信息的传值
        }
        model.addAttribute("workorder", workorderService.getWorkorderList()); //获取列表的传值
        return "worklist";
    }

然后我们运行:

看起来似乎没有问题,但是我们刷新下这个页面再看看:

我们发现页面又重复提交了一遍数据,那么如何解决这个问题呢?

下面,我们先将 controller层的代码修改一下:

@RequestMapping(value = "addsave")
    public String addsave(Workorder workorder, Model model) {
        workorder.setCreateDate(new Date());
        if (workorderService.add(workorder))
            model.addAttribute("info", "保存成功");  //提示信息的传值
        return "redirect:worklist";
    }

    @RequestMapping("worklist")
    public String worklist(Model model) {
        model.addAttribute("workorder", workorderService.getWorkorderList());  //获取列表的传值
        return "worklist";
    }

这里我们直接加了一个方法,用来返回 worklist页面,我们再运行一下看看效果:

可以发现我们添加列表成功,刷新页面也不会重复传值,但是 info的参数保存成功并没有在页面显示,同理 Model换成 HttpServletRequest形参也是不行的(亲测无效)。

那么我们应该怎么解决 info传递问题呢?

答: 使用 RedirectAttributes形参

@RequestMapping(value = "addsave")
    public String addsave(Workorder workorder, RedirectAttributes redirectAttributes) {
        workorder.setCreateDate(new Date());
        if (workorderService.add(workorder))
            redirectAttributes.addFlashAttribute("info", "保存成功");  //提示信息的传值
        return "redirect:worklist";
    }

    @RequestMapping("worklist")
    public String worklist(Model model) {
        model.addAttribute("workorder", workorderService.getWorkorderList());  //获取列表的传值
        return "worklist";
    }

再次运行页面:

传值成功!同时,刷新页面info的值保存成功也会消失。

完美!!

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 4,462评论 1 16
  • AngularJS是什么?AngularJs(后面就简称ng了)是一个用于设计动态web应用的结构框架。首先,它是...
    200813阅读 624评论 0 3
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 2,960评论 1 21
  • 对于java中的思考的方向,1必须要看前端的页面,对于前端的页面基本的逻辑,如果能理解最好,不理解也要知道几点。 ...
    神尤鲁道夫阅读 129评论 0 0
  • 不久前,拼多多宣布与国美合作,国美尝试把精力下沉到四五线城市,而拼多多自然也相中了零售巨头国美的诸多优点。 拼多...
    千氪阅读 25评论 0 0