是的,实际上我在整个会话过程中遇到了一个奇怪的问题。
我有一个控制器如下:
@SessionAttributes({"cart", "order"})
public class CartController {
好的,我有一个将商品添加到购物车的请求:
@RequestMapping(method = RequestMethod.POST, value = "/kleidung/{slug}")
@Transactional
public String addClothingToCart(final Model model,
@ModelAttribute("addToCartAttribute") @Valid final AddToCartDTO cartDto,
final BindingResult errors, @PathVariable("slug") final String slug,
@ModelAttribute("cart") Cart cart,
final HttpServletRequest request) {
final Clothing clothing = clothingRepository.findBySlug(slug);
validateAddToCartDto(cartDto, errors);
if (errors.hasErrors()) {
return viewPreparer.prepareDetailViewFor(clothing, model);
}
addProductToCart(cartDto, clothing, cart);
cart = cartRepository.saveAndFlush(cart);
return "redirect:/warenkorb";
}
由于我对解决我的问题感到失望,我应用了事务注释我认为它没有改变任何东西,所以它不会使问题变得更糟或更好。
反正
另一种方法可以删除项目如下:
@RequestMapping(method = {RequestMethod.GET, RequestMethod.DELETE}, value = "/{listId}")
@Transactional
public String deleteItemFromCart(@PathVariable("listId") final String listId,
@ModelAttribute("cart") Cart cart,
final SessionStatus session) {
cart.getOrderItems().remove(Integer.parseInt(listId));
if (cart.getOrderItems().isEmpty()) {
session.setComplete();
}
cart = cartRepository.saveAndFlush(cart);
return "redirect:/warenkorb";
}
到目前为止,一切都很好 :)
现在出现了奇怪的部分,如果我将两个项目添加到购物车并删除其中一个,然后尝试更改购物车,我总是得到一个 EntityNotFoundException。
整个会话的行为是如此奇怪,我不知道如何解决它。
也许有人有建议或解决方案。