Spring MVC + Session属性和多个标签

时间:2012-05-29 12:24:35

标签: java spring-mvc

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

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

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

我的方法是使用SessionAttributeModelAttribute不正确吗?

我的控制器:

@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();
}

}

2 个答案:

答案 0 :(得分:2)

我最终使用自定义SessionAttributeStore,基于Marty Jones的文章

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

答案 1 :(得分:1)

如果您只显示存储在Session中的对象并且不允许对其进行编辑或替换,则此方法可以。但是对于这样的情况,建议使用请求范围而不是会话范围。