Spring MVC 中的 forward redirect Flash属性

forward:转发

redirect:重定向

-- 转发比重定向快,因为重定向经过客户端,而转发并没有。

-- 重定向能够重定向到一个外部网站,但转发不行。

-- 重定向能够避免在用户重新加载页面时再次调用同样的动作。

-- Spring 3.1 以后通过 Flash 属性提供了一种供重定向传值的方法。

使用 Flash 属性,必须在 Spring MVC 配置文件中有一个 <annotation-driven /> 元素,然后必须在方法上添加一个新的参数类型 org.springframework.web.servlet.mvc.support.RedirectAttributes

@RequestMapping(value = "product_save", method = RequestMethod.POST)
public String saveProduct(ProductForm productForm, RedirectAttributes redirectAttribute){
    logger.info("saveProduct called");
    // no need to create and instantiate a ProductForm
    // create Product
    Product product = new Product();
    product .setName(productForm.getName());
    product.setDescription(productForm.getDescription());
    try {
        product.setPrice(Float.parseFloat(productForm.getPrice()));
    } catch (NumberformatException e){
    }
    // add product
    Product saveProduct = productService.add(product);
    redirectAttributes.addFlashAttribute("message", "The product was successfully added.");
    return "redirect:/product_view/" + saveProduct.getId();
}