解决刷新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的值保存成功也会消失。

完美!!

copyright © Tmiracle all right reserved,powered by Gitbook该文件最后修改时间: 2019-12-11 00:55:32

results matching ""

    No results matching ""