重定向是客户端跳转,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(); }