5

我有一些用户界面,管理员可以在其中更新产品。在我的开发/测试期间,我只打开了一个窗口,一切正常。

然后客户正在编辑,他们为不同的产品打开了多个选项卡,保存后,这导致了重复字段问题。

我假设这是@SessionAttributes和的组合@ModelAttribute。最后打开的产品是放在会话中的产品,因此如果您尝试编辑第一个选项卡,您实际上会得到不正确的产品。

我的方法在下面,使用SessionAttribute,并且ModelAttribute不正确吗?

我的控制器:

@Controller
@SessionAttributes({ "product" })
public class ProductController {

@RequestMapping(value = "/product/update/{productId}", method = RequestMethod.GET)
public String update(@PathVariable Long productId, Model model) {
    Product product;
    if (productId == null) {
        product = new Product();
    } else {
        product = Product.find(productId);
    }
    model.addAttribute("product", product);
    return "product/update";
}

@RequestMapping(value = "/product/update", method = RequestMethod.POST)
public String update(@ModelAttribute Product product, BindingResult result,
        Model model) {
    if (result.hasErrors()) {
        return "product/update";
    }
    product = product.merge();
    return "redirect:/product/update/" + product.getId();
}

}

4

2 回答 2

2

In cases where you will just show the object stored in Session and will not allow it being edited or replaced, this approach is okay. But for cases like this, it is advisable to use request scope rather than session scope.

于 2012-05-29T13:13:17.507 回答
2

根据 Marty Jones 的文章,我最终使用了自定义 SessionAttributeStore

http://marty-java-dev.blogspot.com/2010/09/spring-3-session-level-model-attributes.html

于 2012-05-29T15:44:01.273 回答