JPA/JPA 활용

웹 계층 개발 - 상품 수정

chanhee01 2023. 7. 11. 18:12

상품을 등록하고 나중에 수정할 일이 있을 때 상품을 수정하는 기능이다.

 

 

@GetMapping("items/{itemId}/edit")
public String updateItemForm(@PathVariable("itemId") Long itemId, Model model) {
    Book item = (Book) itemService.findOne(itemId); // 상품은 책만 있다고 가정

    BookForm form = new BookForm();
    form.setId(item.getId());
    form.setName(item.getName());
    form.setPrice(item.getPrice());
    form.setStockQuantity(item.getStockQuantity());
    form.setAuthor(item.getAuthor());
    form.setIsbn(item.getIsbn());

    model.addAttribute("form", form);
    // 수정이니까 원래 있던 값을 가져와야함

    return "items/updateItemForm";
}

GetMapping으로 id에 맞는 수정 페이지로 들어간다. @PathVariable 애노테이션은 itemId에 맞는 url로 연결시켜주는 역할을 한다. 상품 수정을 누르면 원래 기존 값이 뭐였는지 들어있어야하기 때문에 itemService에서 itemId로 상품을 가져온 다음에 model로 넘겨줘서 사용자가 볼 수 있게 해줘야한다.

 

상품1의 수정페이지이다.

 

 

 

 

@PostMapping("items/{itemId}/edit")
public String updateItem(@PathVariable String itemId, @ModelAttribute("form") BookForm form) {

    Book book = new Book();
    book.setId(form.getId());
    book.setName(form.getName());
    book.setPrice(form.getPrice());
    book.setStockQuantity(form.getStockQuantity());
    book.setAuthor(form.getAuthor());
    book.setIsbn(form.getIsbn());

    itemService.saveItem(book);
    return "redirect:/items";
}

PostMapping으로 값을 입력하면 실제로 데이터가 바뀌는 기능이다. @ModelAttribute로 모델을 받아온다. 그리고 new Book()을 통해 새로운 책 객체를 만들고 form에다가 다시 set으로 값을 설정해준 다음에 saveItem으로 값을 저장해준다.

 

변경할 값들을 입력해준다.

 

 

목록을 들어가보면 값이 변경되어있다.

 

상품 수정 관련 html은 상품 등록 html과 거의 유사하기때문에 생략하도록 하겠다.