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

컴퓨터공부하자님의 프로필 이미지
컴퓨터공부하자

작성한 질문수

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

오류 코드와 메시지 처리6

@ModelAttribute가 한 개가 아닐 경우에는 어떻게 하나요?

해결된 질문

작성

·

627

13

콘트롤러에
@ModelAttribute Item item, BindingResult bindingResult
이렇게 연속적으로 매개변수를 설정해줘야 한다.
bindingResult에 넣어주게 되는 Error 객체들이 @ModelAttribute의 필드들과 자동 맵핑되기 때문이다,
라고 이해했습니다.
그럼 두개의 ModelAttribute가 들어가는 경우
addItem (
@ModelAttribute Item item1, BindingResult bindingResult1, @ModelAttribute Item item2, BindingResult bindingResult2
)
이렇게 설정해줘야 하는지요?
어라 그럼 템플릿에서 errors객체는
BindingResult bindingResult1,
BindingResult bindingResult2
이 둘중에 뭐가 되는거지... 같은 의문이 들어서 질문드려봅니다.

답변 1

8

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 컴퓨터공부하자님

두개의 ModelAttribute가 들어가는 경우 생각하신 내용이 맞습니다.

템플릿에서는 예를 들어서 카테고리라는 모델이 추가된다면 다음과 같이 작성하시면 됩니다. th:object는 이미 item으로 지정했기 때문에 $문법으로 전체 모델을 적어주셔야 합니다.

BindindResult에는 어떤 객체에서 오류가 있는지 확인할 수 있고, errors 객체는 모델의 이름이 반영되므로, 이를 이용해서 타임리프는 해당 내용을 구분해서 판별할 수 있습니다.

        <div>

            <label for="itemName" th:text="#{label.item.itemName}">상품명</label>

            <input type="text" id="itemName" th:field="*{itemName}"

                   th:errorclass="field-error" class="form-control" placeholder="이름을 입력하세요">

            <div class="field-error" th:errors="*{itemName}">

                상품명 오류

            </div>

        </div>

        <div>

            <label for="categoryName" >카테고리</label>

            <input type="text" id="categoryName" th:field="${category.categoryName}"

                   th:errorclass="field-error" class="form-control" placeholder="이름을 입력하세요">

            <div class="field-error" th:errors="${category.categoryName}">

                상품명 오류

            </div>

        </div>

감사합니다.

감사합니다!

컴퓨터공부하자님의 프로필 이미지
컴퓨터공부하자

작성한 질문수

질문하기