카테고리 없음

[Thymleaf] 타임리프 + 스프링 통합

잉숭 2021. 7. 17. 18:57

타임리프는 스프링 없이도 동작하지만 스프링과 통합을 위한 다양한 기능을 제공한다

그 기능에는 다음과 같은 것들이 있다

 

1. SpringEL 문법 제공

2. 스프링 빈 호출 지원

3. 폼 관리를 위한 추가 속성 제공

4. 폼 컴포넌트 기능 제공

5. 메시지, 국제화 기능의 통합

6. Validation(검증), 오류 처리 통합

7. 변환 서비스 통합 (ConversionService)

 


입력 폼 처리 기능

 

*{...} : 선택 변수 식, th:object에서 선언한 객체에 프로퍼티 접근법으로 접근한다

th:field : HTML 태그의 id, name, value 속성을 자동으로 추가해준다

 

렌더링 전

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

렌더링 후

<input type="text" id="itemName" name="itemName" th:value="*{itemName}" />

 


체크 박스, 라디오 박스, 셀렉트 박스

타임리프가 제공하는 기능을 사용하면 체크 박스, 라디오 박스, 셀렉트 박스를 편리하게 사용할 수 있다

 

체크 박스의 경우 특별한 기능을 제공하는데 다음을 보자

 

체크박스를 체크하는 경우 다음과 같은 쿼리가 서버로 전송된다

http://localhost:8080/add?open=on

만약 체크박스를 해제하는 경우 다음과 같은 쿼리가 발생할 것이다

http://localhost:8080/add

 

이런 경우 서버는 체크박스를 해제한 경우와 체크박스를 선택하지 않은 경우를 구별하지 못한다

 

따라서 이를 방지하기 위해 open 필드 앞에 _를 붙여 _open 필드를 같이 설정하여야 한다

 

이를 적용하면 

 

 

체크한 경우

http://localhost:8080/add?open=on&_open=on

체크를 해제한 경우

http://localhost:8080/add?_open=on

 

가 된다

 

직접 hidden 필드를 작성하는 방법 대신 th:field 속성을 추가하면 타임리프는 이를 자동으로 생성해준다