重定向是客戶端跳轉,2次請求,2次響應,因此一開始提交的數據在這個過程中會丟失。
轉發為服務器跳轉,1次請求,一次響應,數據會接着傳遞到所要跳轉的頁面當中。
在crud操作中,增刪改這類不需要進行顯示的的操作則需要用到重定向,否則多次提交可能會產生產生一些額外的錯誤。
當需要傳參數時,別入編輯屬性時需要跳到編輯頁面時,此時則使用轉發。
@RequestMapping("admin_product_add") public String add(Model model, Product p) { p.setCreateDate(new Date()); productService.add(p); return "redirect:admin_product_list?cid="+p.getCid(); } @RequestMapping("admin_product_delete") public String delete(int id) { Product p = productService.get(id); productService.delete(id); return "redirect:admin_product_list?cid="+p.getCid(); } @RequestMapping("admin_product_edit") public String edit(Model model, int id) { Product p = productService.get(id); Category c = categoryService.get(p.getCid()); p.setCategory(c); model.addAttribute("p", p); return "admin/editProduct"; } @RequestMapping("admin_product_update") public String update(Product p) { productService.update(p); return "redirect:admin_product_list?cid="+p.getCid(); }