폼에서 에러 출력 로직? 질문 드립니다.
100
작성한 질문수 90


<form action="item.html" th:action th:object="${item}" method="post">
...
<div>
<label for="price" th:text="#{label.item.price}">가격</label>
<input type="text" id="price" th:field="*{price}"
th:errorclass="field-error" class="form-control" placeholder="가격을 입력하세요">
<div class="field-error" th:errors="*{price}">
가격 오류
</div>
</div>
...
</form>타입정보가 맞지 않는 경우 뷰에서 에러 출력 로직이 어떻게 되는지 궁금합니다.
사진에서처럼 가격 정보에 qqq를 입력했고 가격 입력 폼 아래 에러 정보가 출력되었습니다.
두가지 에러가 나타나는데요 한가지는
스프링이 직접 검증 오류에 추가한 경우의 오류와 저희가 직접 만든 오류입니다.
여기서 html 코드를 살펴보았는데요.
저는 두가지 오류가 생성되었기때문에 <div>도 두가지가 생성 되었을거라 생각했으나 페이지의 html 코드에서 <div>태그가 각각 생성되지 않고 하나의 <div>태그에 줄바꿈 태그인 <br>로 오류가 구분되었다는 점과 th:each 같은 것이 사용되지 않았다는 점에서
궁금한점이 생기는데요 어떻게 한가지 태그 안에서 두가지 오류를 출력 할 수 있나요?
th:errors 에 뭔가가 있을 것 같긴한데요. 어떻게 되는건가요?
현재 두가지 오류 객체가 생성되는데 이것이 리스트 같은곳에 담겨서 이 리스트 자체가 erros에 내부(?)에서 반복을 실행한다거나 그런게 있을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
yoon6669님, Spring MVC에서 사용되는 th:errors 속성이 바로 이러한 동작을 가능하게 합니다. th:errors는 검증Error 객체들의 메시지를 한번에 처리하기에 적합한 기술입니다.
말씀하신 대로, Spring MVC는 여러 검증 오류가 발생했을 경우 이를 별도 리스트로 관리하여 th:errors에 전달합니다. 이 리스트는 뷰에서 자동으로 렌더링 처리되어, 각각의 오류 메시지가 <br> 태그로 구분되어 출력됩니다. 덕분에 별도의 th:each 사용 없이도 이 기능을 직접적으로 활성화할 수 있습니다.
Spring의 검증 오류는 FieldError 객체로 관리되며, 이러한 객체들은 BindingResult에 저장됩니다. th:errors="*{fieldName}"를 사용하면 BindingResult에서 해당 필드에 대한 모든 오류 메시지가 HTML에서 자동으로 표현됩니다.
즉, 여러 오류가 있을 경우 내부적으로는 오류 리스트를 생성하여 이 리스트의 요소 각각을 기본적인 줄바꿈 처리를 통해 HTML로 출력하게 되는 것입니다.
위의 경우와 같이 가격 입력 시 다양한 검증 오류가 있을 때, 이 오류 메시지들은 자동으로 th:errors에 의해 렌더링된다는 점 참고해주세요.
추가적으로 보시면 좋을 자료: Spring 공식 문서에서 Form Validation 부분을 참조하시면 더 많은 정보를 얻으실 수 있습니다.
이미지 업로드와 db 트랜잭션 묶는법
0
43
1
Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4
0
53
2
MessageSourceTest 코드
0
47
1
인터셉터 에러 설정
0
48
1
resolveArgument()메서드 질문
0
57
1
43강 검증1 에서 실패 로직 관련 질문있습니다.
0
57
2
타임리프 3.X 버전 rendering, serializer 에러 해결 방법
2
133
3
스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ
0
90
3
pdf 오타 문의
0
57
1
ItemUpdateForm 검증 관련 질문입니다.
0
48
1
22page 링크 주소 변경
0
59
2
특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문
0
53
1
섹션3번 수업에 대한 질문입니다.
0
80
2
@Autowired 보다 더 좋은 방법이 어떤 걸까요?
0
85
2
타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.
0
65
1
자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다
0
142
3
스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문
0
63
1
톰캣 에러 페이지가 안보입니다.
0
103
2
apiEceptionController에서 센드 에러 호출하면 안되는지?
0
81
1
세션 타임아웃시 쿠키 삭제 방법이 없나요?
0
118
2
ApiExceptionController 질문드립니다.
0
64
1
셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?
0
66
1
MemberRepository 필드의 fianl 선언 유무
0
85
2
혹시 index.html 에서는 fragment 사용이 안되는건가요
0
58
1





