5

管理者が製品を更新できるUIがいくつかあります。開発/テスト中、開いたウィンドウは1つだけで、すべてが正常に機能しました。

次に、クライアントが編集していて、さまざまな製品の複数のタブを開きました。保存すると、フィールドの重複の問題が発生しました。

これはとの組み合わせだと思い@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();
}

}

4

2 に答える 2

2

Sessionに保存されているオブジェクトを表示するだけで、編集や置換ができない場合は、この方法で問題ありません。ただし、このような場合は、セッションスコープではなくリクエストスコープを使用することをお勧めします。

于 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 に答える