Inflearn brand logo image

인프런 커뮤니티 질문&답변

yoon6669님의 프로필 이미지
yoon6669

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

오류 코드와 메시지 처리6

폼에서 에러 출력 로직? 질문 드립니다.

작성

·

67

0

스크린샷 2025-06-20 175159.png.webp스크린샷 2025-06-20 175315.png.webp
<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 부분을 참조하시면 더 많은 정보를 얻으실 수 있습니다.

yoon6669님의 프로필 이미지
yoon6669

작성한 질문수

질문하기