본문 바로가기
728x90
반응형

스프링/스프링 웹53

[Spring] RedirectAttributes 상품을 저장하고 상품 상세 화면으로 리다이렉트 한 것 까지는 좋았다. 그런데 고객 입장에서 저장이 잘 된 것인지 안 된 것인지 확신이 들지 않는다. 그래서 저장이 잘 되었으면 상품 상세 화면에 "저장되었습니다"라는 메시지를 보여달라는 요구사항이 왔다. 간단하게 해결해보자. BasicItemController에 추가 /** * RedirectAttributes */ @PostMapping("/add") public String addItemV6(Item item, RedirectAttributes redirectAttributes) { Item saveItem = itemRepository.save(item); redirectAttributes.addAttribute("itemId", saveItem.ge.. 2023. 6. 15.
[Spring] PRG 패턴 - Post/Redirect/Get 사실 지금까지 진행한 상품 등록 처리 컨트롤러는 심각한 문제가 있다. (addItemV1 ~ addItemV4) 상품 등록을 완료하고 웹 브라우저의 새로고침 버튼을 클릭해보자. 상품이 계속해서 중복 등록되는 것을 확인할 수 있다. 전체 흐름 그 이유는 다음 그림을 통해서 확인할 수 있다. POST 등록 후 새로 고침 웹 브라우저의 새로 고침은 마지막에 서버에 전송한 데이터를 다시 전송한다. 상품 등록 폼에서 데이터를 입력하고 저장을 선택하면 POST /add + 상품 데이터를 서버로 전송한다. 이 상태에서 새로 고침을 또 선택하면 마지막에 전송한 POST /add + 상품 데이터를 서버로 다시 전송하게 된다. 그래서 내용은 같고, ID만 다른 상품 데이터가 계속 쌓이게 된다. 이 문제를 어떻게 해결할 수.. 2023. 6. 15.
[Spring] 상품 수정 상품 수정 폼 컨트롤러 BasicItemController에 추가 @GetMapping("/{itemId}/edit") public String editForm(@PathVariable Long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/editForm"; } 수정에 필요한 정보를 조회하고, 수정용 폼 뷰를 호출한다. 상품 수정 폼 뷰 /resources/templates/basic/editForm.html\ 상품 수정 폼 상품 ID 상품명 가격 수량 저장 취소 상품 수정 폼은 상품 등록과 유사하고, 특별한 내용이 없다. 상품 수정 개발 @P.. 2023. 6. 15.
[Spring] 상품 등록 폼 및 상품 등록 처리 - @ModelAttribute 상품 등록 폼 BasicItemController에 추가 @GetMapping("/add") public String addForm() { return "basic/addForm"; } 상품 등록 폼은 단순히 뷰 템플릿만 호출한다. 상품 등록 폼 뷰 /resources/templates/basic/addForm.html 상품 등록 폼 상품 입력 상품명 가격 수량 상품 등록 취소 속성 변경 - th:action - th:action - HTML form 에서 action 에 값이 없으면 현재 URL에 데이터를 전송한다. - 상품 등록 폼의 URL과 실제 상품 등록을 처리하는 URL을 똑같이 맞추고 HTTP 메서드로 두 기능을 구분한다. : 상품 등록 폼 : GET /basic/items/add : 상품 등.. 2023. 6. 14.
[Spring] 상품 상세 BasicItemController에 추가 @GetMapping("/{itemId}") public String item(@PathVariable long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/item"; } PathVariable 로 넘어온 상품ID로 상품을 조회하고, 모델에 담아둔다. 그리고 뷰 템플릿을 호출한다 상품 상세 뷰 정적 HTML을 뷰 템플릿(templates) 영역으로 복사하고 다음과 같이 수정 /resources/static/item.html → 복사 → /resources/templates/basic/item.html.. 2023. 6. 14.
[Spring] 상품 목록 - 타임리프(Thymeleaf) BasicItemController package hello.itemservice.web.basic; import hello.itemservice.domain.item.Item; import hello.itemservice.domain.item.ItemRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMappin.. 2023. 6. 14.
728x90
반응형