Thymeleaf 폼 바인딩과 변수 직접 사용

dropKick·2024년 1월 10일

개발 이슈

목록 보기
13/14

개요

  • Thymeleaf를 이용하여 페이지 구현 중 th:object,th:field를 통해 폼 바인딩을 구현
  • 이 때 폼 바인딩 방식과 변수의 직접 사용에 대해서 알아봄

th:object와 th:field 바인딩

✅ th:object는 폼 바인딩을 위해 특정 객체를 지정
✅ th:field는 해당 객체의 필드를 바인딩

<form th:object="${user}">
    <input type="text" th:field="*{name}"/>
    <input type="text" th:field="*{email}"/>
</form>
  • th:object="${user}"로 user 객체를 폼 바인딩
  • th:field="*{name}"user.name을 자동으로 바인딩, ${user.name}과 동일
  • 폼 바인딩 시 스프링에서 자동으로 유효성 검사를 지원

폼 바인딩 없이 필드를 가져오려는 경우

<form>
    <input type="text" th:field="*{name}"/>
</form>
  • 지정된 객체가 없어 오류 발생

바인딩 대신 필드 변수를 직접 할당하는 경우

<form th:object="${user}">
    <input type="text" value="${user.name}"/>
</form>
  • 자동 필드값 바인딩과 BindingResult가 지원되지 않음
  • 렌더링 시 서버에서 값이 변경되어도 자동 바인딩이 되지 않아 폼 제출 후 유효성 검사 실패 시 입력한 값이 유지되지 않음

결론

  • 객체를 가져와 필드에 값을 매핑 해야하는 경우 반드시 th:object,th:field를 사용
profile
안아줘요

0개의 댓글