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