BackEnd/spring 21

검증 - BindingResult

BindingResult이란 ==> 스프링이 제공하는 검증 오류를 보관하는 객체이다. 앞선 실습에서는 검증 오류를 HashMap에 보관했지만 이번에는 BindingResult를 이용해 보았다.  @PostMapping("/add") public String addItemV1(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) {// //검증 오류 결과를 보관// Map errors = new HashMap(); //검증 로직 if(!StringUtils.hasText(item.getItemName())){// ..

BackEnd/spring 2024.07.26

검증(직접 처리)

웹어플리케이션의 검증 기능을 직접 처리 해보는 시간을 가져봤다. 검증 요구사항1) 가격, 수량에 문자가 들어가면 검증 오류 처리 2) 상품명: 필수, 공백X    가격: 1000원 이상, 1백만원 이하    수량: 최대 9999 3) 가격 * 수량의 합은 10,000원 이상  이러한 요구 사항을 만족 시키지 못한다면 어떤 오류가 발생했는지 고객에게 알려주고 다시 '상품 등록 폼'을 띄워서 다시 값을 입력 하도록 한다. @PostMapping("/add")public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { //검증 오류 결과를 보관 Map errors = new H..

BackEnd/spring 2024.07.25

웹 애플리케이션에 국제화 적용하기

앞선 글에서 작성한 코드에서는 메시지만 적용했고 이번에는 국제화를 적용해 보았다.https://developerwoohyeon.tistory.com/107 웹 애플리케이션에 메시지 적용하기테스트 코드를 통해 메시지 적용을 확인했으니 이제 웹 어플리케이션에 메시지를 적용해보자. label.item=상품label.item.id=상품 IDlabel.item.itemName=상품명label.item.price=가격label.item.quantity=수량page.items=developerwoohyeon.tistory.com  국제화는 messages_en.properties에 영어 메시지를 추가해주면 끝난다. label.item=Itemlabel.item.id=Item IDlabel.item.itemName=I..

BackEnd/spring 2024.07.24

스프링 메시지 소스 사용

스프링이 메시지와 국제화 기능을 모두 제공한다.  메시지 소스 설정하기spring.messages.basename=messages,config.i18n.messagesMessageSource를 스프링 빈으로 등록하지 않으면 message라는 이름으로 기본 등록된다. 따라서 message_en.properties와 같이 파일만 등록하면 자동인식이 된다.  hello=안녕hello.name=안녕 {0}hello=hellohello.name=hello {0}  package hello.itemservice.message;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org...

BackEnd/spring 2024.07.24

간단한 Web페이지 프로젝트(7) - RedirectAttributes

요구사항 상품을 추가하면 저장이 되었다는 메시지를 띄우기.  개발 RedirectAttribute를 사용하여 URL 인코딩도 하고, pathVariable, 쿼리 파라미터까지 처리할 수 있다. @PostMapping("/add")public String addItemV6(Item item, RedirectAttributes redirectAttributes) { Item savedItem=itemRepository.save(item); redirectAttributes.addAttribute("itemId",savedItem.getId()); redirectAttributes.addAttribute("status",true); return "redirect:/basic/items/{..

BackEnd/spring 2024.07.07

간단한 Web페이지 프로젝트(6) - PRG Post/Redirect/Get

지금까지 진행하고 있던 프로젝트에 문제점이 있다.◆ 상품 등록을 완료하고 새로고침을 누르면 상품이 계속 중복 등록이 되는 것을 확인할 수 있다.문제 원인 웹 브라우저 새로고침은 마지막에 서버에 전송한 데이터를 다시 전송한다.상품을 등록할때 POST/add를 이용해서 상품 데이터를 서버로 등록하는데,이 상태에서 새로고침을 하면 POST/add를 한번 더 하게 되므로 ID만 다르게 상품이 계속 등록되는 것이다.   문제 해결법 이러한 문제를 해결하기 위해서 리다이렉트를 이용해주면 된다.새로 고침 문제를 해결하기 위해 상품 저장 후에 뷰 템플릿으로 이동하는것이 아니라, 상품 상세 화면으로 리다이렉트를 호출해주면 된다. @PostMapping("/add")public String addItemV5(Item it..

BackEnd/spring 2024.07.07

간단한 Web페이지 프로젝트(5) - 상품 수정

목표 상품 수정을 가능하게 하기상품 수정 폼에서 저장 버튼을 누르면 상품 수정이 완료되고, 취소 버튼을 누르면 다시 상품 상세 폼으로 돌아오게 하기 개발 Get ==> 상품 수정 폼@GetMapping("/{itemId}/edit")public String editForm(@PathVariable Long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/editForm";} 수정할 정보를 조회하고, 수정용 폼 뷰를 호출  Post ==> 상품 수정 처리@PostMapping("/{itemId}/edit") public String ..

BackEnd/spring 2024.07.06

간단한 Web페이지 프로젝트(3)- 상품 상세

목표 상품명이나 ID를 누르면 상품 상세 정보를 띄우도록 한다.  설계 1) BasicItemController에서 PathVariable로 넘어온 상품 ID로 상품을 조회하고, 모델에 담아둔다. 그리고 뷰템플릿을 호출한다.@GetMapping("/{itemId}")public String item(@PathVariable("itemId") Long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/item";}  2) 정적 HTML을 뷰 템플릿(templates) 영역으로 복사하고 수정  상품 상세 ..

BackEnd/spring 2024.07.05