작성
·
67
0
<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 부분을 참조하시면 더 많은 정보를 얻으실 수 있습니다.