[Thymeleaf] Why - th:value와 th:field의 차이

하쮸·2025년 8월 6일
0

Error 또는 Why & How

목록 보기
21/43

1. th:value

  • 단순히 HTML 요소의 value 속성에 값을 지정함.
  • 데이터 객체와 바인딩되지 않음.
    • 수동으로 값을 설정.
  • 주로 입력 필드에 초기값을 설정하거나 서버에서 전달된 데이터를 표시할 때 사용됨.
  • Ex) 입력 필드에 특정 값을 표시하고 싶을 때 사용
<input type="text" th:value="${user.username}">

            ↓
            ↓ 결과
            ↓

<input type="text" value="홍길동">
  • id와 name 속성은 직접 따로 지정해야됨.

2. th:field

  • 폼 필드와 백엔드의 모델 객체를 직접적으로 바인딩하여 입력값을 서버로 전송하거나 서버에서 받은 데이터를 폼 필드에 반영함.
    • th:field는 폼 객체의 특정 필드와 HTML 요소를 바인딩(Binding)하는 역할.
  • 주로 Spring MVC와 함께 사용되고 폼 데이터를 모델 객체의 속성과 자동으로 매핑함.
  • th:field는 내부적으로 HTML의 name, id, value 속성을 자동으로 설정함.
    • 폼 데이터를 처리하거나 검증할 때 주로 사용됨.
  • Ex) 사용자가 입력한 데이터를 서버로 전송하거나, 서버에서 받은 데이터를 폼에 자동으로 채울 때 사용.
<input type="text" th:field="*{username}">

            ↓
            ↓ 결과
            ↓

<input type="text" id="username" name="username" value="홍길동">
  • 특히 *{...} 표현을 쓸 때는 th:object가 있어야 제대로 동작함.
    • Why?
      th:field="*{username}" 와 같이 *{} 문법을 사용하면
      th:object지정한 객체를 기준 루트(root)로 해서 바인딩할 필드를 찾기 때문.
<form th:object="${user}" method="post">
    <input type="text" th:field="*{username}">
</form>
  • user.username 필드와 자동 바인딩

3. 참고.

profile
Every cloud has a silver lining.

0개의 댓글