inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

오류 코드와 메시지 처리6

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

100

yoon6669

작성한 질문수 90

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에 내부(?)에서 반복을 실행한다거나 그런게 있을까요?

spring mvc

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 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