Method에 BindingResult bindingResult 객체 선언 후( 주의할 점 !! BindingResult객체 선언은 ModelAttribute 다음에 와야함)
bindingResult.addError(new FieldError(objectName명, field명, defaultMessage명));
여기서 FieldError는 특정 Field에 대한 error이다
따라서 globalError를 관리할때에는 ObjectError 생성자를 사용해야함
bindingResult.addError(new ObjectError("item", "가격 * 수량의 합은 10,000원 이상이어야 합니다. 현재 값 = " + resultPrice));
그리고 검증 실패시에는 if 조건문에 bindingResult.hasErrors()를 넣어주면됨
if (bindingResult.hasErrors()) {
}
bindingResult는 modelAttribute에 굳이 안담아도 자동으로 뷰에 넘어가기 때문에
model.addAttribute에 안담아줘도됨
뷰에서 사용하기 위해서는
<div th:if="${#fields.hasGlobalErrors()}">
<p class="field-error" th:each="err : ${#fields.globalErrors()}" th:text="${err}">글로벌 오류 메세지</p>
</div>
이런식으로 사용하면된다.
또한 필드오류는 Thymeleaf가 기가막히게 간단하게 처리해주는데,
<div class="field-error" th:errors="*{itemName}">
상품명 오류
</div>
이런식으로 th:error="*{controller에서 설정한 필드오류명}"을 적어주면
에러가 있으면 메세지를 출력해주고, 없으면 출력하지 않게된다.
추가로 오류가 있을때 오류메세지의 색을 변경하고 싶다면,
<input type="text" id="itemName" th:field="*{itemName}"
th:errorclass="field-error" class="form-control" placeholder="이름을 입력하세요">
이런식으로 작성해주면, 해당하는 th:field명에 오류가 있으면 class(여기선 form-control)에 field-error를 추가해줌
'Languages | Frameworks > Spring' 카테고리의 다른 글
BindingResult(rejectValue(), reject())사용하기 -3 + MessageCodesResolver 소개 (0) | 2022.03.21 |
---|---|
BindingResult -2 (0) | 2022.03.21 |
@ControllerAdvice, @ExceptionHandler를 이용한 예외처리 분리, 통합하기(Spring에서 예외 관리하는 방법, 실무에서는 어떻게?) (0) | 2021.12.30 |
Spring AOP(관점지향프로그래밍) (0) | 2021.09.24 |
SpringBoot JPA (0) | 2021.09.23 |