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로 넘겨줘서 사용자가 볼 수 있게 해줘야한다.
@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과 거의 유사하기때문에 생략하도록 하겠다.