자바 웹 프로그래밍

준비중..

자바 웹 프로그래밍

나만의 웹사이트를 만들어 보자!

x16 폼검증

# 폼 검증(form validation) ## 목차 1. 라이브러리 등록 2. 애노테이션 작성 3. 폼 검증 수행 ## 라이브러리 등록 폼 검증을 위한 라이브러리를 등록. **pom.xml** ``` ... <!-- Form Validation --> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.3.Final</version> </dependency> ... ``` ## 애노테이션 작성 대상 VO 필드에 검증할 애노테이션을 추가. **Article** ``` public class Article { private int id; @NotNull private String title; @NotEmpty private String body; ... } ``` ## 폼 검증 수행 ### Valid 폼 검증 수행 **ArticlesController.java** ``` @RequestMapping(value ="/articles", method = RequestMethod.POST) public String create(@Valid @ModelAttribute Article article) { System.out.println(article); articleMapper.create(article); return "redirect:/articles"; } ``` ### BindingResult 폼 검증 결과 저장 **ArticlesController.java** ``` @RequestMapping(value ="/articles", method = RequestMethod.POST) public String create(@Valid @ModelAttribute Article article, BindingResult result) { if (result.hasErrors()) { System.out.println("Error: 폼 검증 실패.."); return "redirect:/articles/new"; // 실패 시, 다시 작성 } // 성공! System.out.println(article); articleMapper.create(article); return "redirect:/articles"; } ``` ### RedirectAttributes 리다이렉트시 사용할 휘발성 데이터 생성 **ArticlesController.java** ``` @RequestMapping(value ="/articles", method = RequestMethod.POST) public String create(@Valid @ModelAttribute Article article, BindingResult result, RedirectAttributes flash) { // 휘발성 파라미터 if (result.hasErrors()) { System.out.println("Error: 폼 검증 실패.."); List<FieldError> fieldErrors = result.getFieldErrors(); // 폼 검증 에러 검출 flash.addFlashAttribute("fieldErrors", fieldErrors); // 휘발성 모델 객체 추가 return "redirect:/articles/new"; } // 성공! System.out.println(article); articleMapper.create(article); return "redirect:/articles"; } ``` ### 폼 검증 에러 확인 RedirectAttributes 객체 정보를 통한 에러 출력 **views/articles/new** ``` <form action="<c:url value="/articles" />" method="post"> <!-- errors --> <c:forEach var="error" items="${ fieldErrors }"> <div class="alert alert-warning"> <p> <strong>${ error.getField() }</strong>: ${ error.getDefaultMessage() } </p> </div> </c:forEach> <!-- inputs --> <div class="form-group"> <label>제목</label> <input name="title" class="form-control" type="text" placeholder="제목을 입력하세요."> </div> <div class="form-group"> <label>내용</label> <textarea name="body" class="form-control" rows="3" placeholder="내용을 입력하세요."></textarea> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> ``` ## 요약