管理者が製品を更新できるUIがいくつかあります。開発/テスト中、開いたウィンドウは1つだけで、すべてが正常に機能しました。
次に、クライアントが編集していて、さまざまな製品の複数のタブを開きました。保存すると、フィールドの重複の問題が発生しました。
これはとの組み合わせだと思い@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();
}
}