스프링/스프링 MVC 패턴
-
상품 등록 범위 검증 - V2 (BindingResult)스프링/스프링 MVC 패턴 2023. 2. 23. 13:18
이전 게시글보다 효율적인 방법이 있다. 코드를 간결하고 명확하게 줄여주는 방법이다. 스프링에서 제공하는 BindingResult를 사용하면 된다. @PostMapping("/add") public String addItem(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { // BindingResult는 무조건 @ModelAttribute 다음에 넣어야함 메서드의 파라미터에서 @ModelAttribute 다음에 BindingResult를 넣어준다. bindingResult.addError(new FieldError("item", "itemName", "상품 이..
-
상품 등록 범위 검증 - V1스프링/스프링 MVC 패턴 2023. 2. 22. 19:23
상품 등록 페이지를 만들었는데, 상품명을 입력하지 않아도 상품으로 등록되고, 가격과 수량을 아무렇게나 입력해도 등록이 된다. 실제로는 이렇게 사용하면 안되니까 몇 가지의 제한을 걸 것이다. 상품명 : 빈칸이면 안됨 수량 : 최대 9999개까지 허용 가격 : 1000원~100만원까지 허용 수량 * 가격이 10000원 이상이어야지만 등록 가능 @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { // 검증 오류 결과를 보관 Map errors = new HashMap(); // 검증 로직 if (!StringUtils.hasText(item...
-
셀렉트 박스 (배송 방식 : 빠른 배송, 일반 배송, 느린 배송)스프링/스프링 MVC 패턴 2023. 2. 19. 15:32
우선 item 객체에 deliveryCode를 추가해준다. @ModelAttribute("deliveryCodes") public List deliveryCodes() { List deliveryCodes = new ArrayList(); deliveryCodes.add(new DeliveryCode("FAST", "빠른 배송")); deliveryCodes.add(new DeliveryCode("NORMAL", "일반 배송")); deliveryCodes.add(new DeliveryCode("SLOW", "느린 배송")); return deliveryCodes; } 모델에 DeliveryCode의 리스트를 넘길 수 있도록 해주는 @ModelAttribute를 만들어준다. 배송 방식 ==배송 방식 선택..
-
라디오 버튼 (상품 종류 : 도서, 식품, 기타)스프링/스프링 MVC 패턴 2023. 2. 19. 15:19
ItemType enum 생성 package hello.itemservice.domain.item; public enum ItemType { BOOK("도서"), FOOD("음식"), ETC("기타"); private final String description; ItemType(String description) { this.description = description; } public String getDescription() { return description; } } enum을 이용한 코드를 만들 예정이니 enum을 생성해주었다. @ModelAttribute("itemTypes") public ItemType[] itemTypes() { ItemType[] values = ItemType.va..
-
체크 박스의 다중(지역: 서울, 부산, 제주)스프링/스프링 MVC 패턴 2023. 2. 19. 14:59
체크 박스를 하나만 선택하는 것이 아니라 여러개를 만들어놓고 중복으로 체크를 하거나 여러개 중에서 고를 수 있도록 체크박스를 여러개 만들어 볼 것이다. @GetMapping("/{itemId}") public String item(@PathVariable long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); // 추가 Map regions = new LinkedHashMap(); regions.put("SEOUL", "서울"); regions.put("BUSAN", "부산"); regions.put("JEJU", "제주"); model.addAttribute("regi..
-
판매 여부 체크박스스프링/스프링 MVC 패턴 2023. 2. 19. 14:06
th:object="${item}"을 입력하면 thymeleaf에서 object가 item의 객체로 인식해서 이후에 item객체에 있는 변수들을 사용할 때 간략화할 수 있다. th:field="${item.itemName}"으로 적어야하는 상황인데 th:field="*{itemName}으로만 적을 수 있다. (id와 name 둘 다 지워도 됨) 판매 여부를 체크할 수 있는 체크박스 @GetMapping("/add") public String addForm(Model model) { model.addAttribute("item", new Item()); // new Item이라는 빈 객체는 addForm에서 사용하기 위해서 넣어주기 return "form/addForm"; } 우선 form/addForm에..
-
상품 웹 사이트 - 리다이렉트스프링/스프링 MVC 패턴 2023. 2. 16. 17:31
이전 게시글에서 만든 상품 웹 사이트는 문제점이 있다. 첫 번째로 상품 등록 폼에서 새로고침을 할 수 있다는 것이다. 상품 등록 폼에서 새로고침을 한다면 마지막에 전송한 POST /add 상품 데이터를 서버로 다시 전송하게 된다. 웹 브라우저의 새로 고침은 마지막에 서버에 전송한 데이터를 다시 전송하기 때문에 결론적으로 ID만 다르고 상세 내용은 같은 데이터가 계속 쌓이는 것이다. PRG Post/Redirect/Get 이러한 문제점을 해결하기 위한 방법이 리다이렉트다. 새로 고침 문제를 해결하는 방법은 상품 저장 후에 뷰 템플릿으로 이동하는 것이 아니라, 상품 상세 화면으로 리다이렉트를 호출해주면 되는 것이다. 웹 브라우저는 리다이렉트의 영향으로 상품 저장 후에 실제 상품 상세 화면으로 다시 이동한다...
-
상품 웹 사이트 - 상품 수정스프링/스프링 MVC 패턴 2023. 2. 16. 16:38
@GetMapping("/{itemId}/edit") // 상품 수정 폼 public String editForm(@PathVariable Long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/editForm"; } 우선 상품 수정 폼이다. 상품 수정을 누르면 상품을 수정할 수 있는 페이지로 넘어가는 코드이다. 상품 수정 폼이다. editForm.html 상품 수정 폼 상품 ID 상품명 가격 수량 저장 취소 상품 수정을 하는 페이지인데, 상품명, 가격, 수량을 변경할 수 있다. 알맞은 값들을 입력하고 저장을 누르면 상품 수정을 처리해준다. 코드..