假如我们需要使用 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的值保存成功也会消失。