유틸리티 객체와 날짜
타임리프는 문자, 숫자, 날짜, URI등을 편리하게 다루는 다양한 유틸리티 객체들을 제공
타임리프 유틸리티 객체들
#message : 메시지, 국제화 처리
#uris : URI 이스케이프 지원
#dates : java.util.Date 서식 지원
#calendars : java.util.Calendar 서식 지원
#temporals : 자바8 날짜 서식 지원
#numbers : 숫자 서식 지원
#strings : 문자 관련 편의 기능
#objects : 객체 관련 기능 제공
#bools : boolean 관련 기능 제공
#arrays : 배열 관련 기능 제공
#lists , #sets , #maps : 컬렉션 관련 기능 제공
#ids : 아이디 처리 관련 기능 제공, 뒤에서 설명
타임리프 유틸리티 객체
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#expression-utility-objects
유틸리티 객체 예시
참고: 이런 유틸리티 객체들은 대략 이런 것이 있다 알아두고, 필요할 때 찾아서 사용하면 된다.
자바8 날짜
타임리프에서 자바8 날짜인 LocalDate , LocalDateTime , Instant 를 사용하려면 추가 라이브러리가 필요하다.
스프링 부트 타임리프를 사용하면 해당 라이브러리가 자동으로 추가되고 통합된다.
타임리프 자바8 날짜 지원 라이브러리
thymeleaf-extras-java8time
자바8 날짜용 유틸리티 객체: #temporals
<span th:text="${#temporals.format(localDateTime, 'yyyy-MM-dd HH:mm:ss')}"></span>
URL 링크
@{...}
@{경로(데이터)}
단순한 URL
@{/hello} -> /hello
쿼리 파라미터
@{/hello(param1=${param1}, param2=${param2})}
-> /hello?param1=data1¶m2=data2
() 에 있는 부분은 쿼리 파라미터로 처리된다.
경로 변수 (path variable)
@{/hello/{param1}/{param2}(param1=${param1}, param2=${param2})}
-> /hello/data1/data2
URL 경로상에 변수가 있으면 () 부분은 경로 변수로 처리(치환)된다.
경로 변수 + 쿼리 파라미터
@{/hello/{param1}(param1=${param1}, param2=${param2})}
-> /hello/data1?param2=data2
경로 변수로 처리되지 않은 파라미터는 쿼리 파라미터가 된다.
상대경로, 절대경로, 프로토콜 기준을 표현할 수 도 있다.
/hello : 절대 경로
hello : 상대 경로
참고: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#link-urls
리터럴 Literals
리터럴은 소스 코드상에 고정된 값을 말하는 용어이다.
타임 리프의 리터럴
문자: 'hello'
숫자: 10
불린: true , false
null: null
타임리프에서 문자 리터럴은 항상 ' (작은 따옴표)로 감싸야 한다.
<span th:text="'hello'">
그런데 문자를 항상 ' 로 감싸는 것은 너무 귀찮은 일이다.
공백 없이 쭉 이어진다면 하나의 의미있는 토큰으로 인지해서 다음과 같이 작은 따옴표를 생략할 수 있다.
룰: 'A-Z' , 'a-z' , '0-9' , '[]' , '.' , '-' , '_' 가 공백 없이 한 덩어리
오류
문자 리터럴은 원칙상 ' 로 감싸야 한다.
예를 들어 "hello world"는 중간에 공백이 있어서 하나의 의미있는 토큰으로 인식되지 않는다.
"'hello world'" 이렇게 ' 로 감싸면 정상 동작한다.
"'hello' + ' world!'"
"'hello world!'"
"'hello ' + ${data}"
"|hello ${data}|" -> 리터럴 대체(Literal substitutions). 마치 like 템플릿
연산
타임리프 연산은 자바와 크게 다르지 않다.
HTML안에서 사용하기 때문에 HTML 엔티티를 사용하는 부분만 주의하자
비교연산: HTML 엔티티를 사용해야 하는 부분을 주의하자. <, > 를 테그가 아닌 문자로 인식
> (gt), < (lt), >= (ge), <= (le), ! (not), == (eq), != (neq, ne)
조건식: 자바의 조건식과 유사하다.
Elvis 연산자: 조건식의 편의 버전
ex) "${data}?: '데이터가 없습니다.'" -> 왼쪽 항이 null이 아니면 출력, null이면 오른쪽 항 출력
No-Operation: _ 인 경우 마치 타임리프가 실행되지 않는 것 처럼 동작한다. 이것을 잘 사용하면 HTML 의 내용 그대로 활용할 수 있다.
ex) "${nullData}?: _" -> 타임리프 렌더링 X, HTML 정적 데이터가 출력
'Advance I > Spring MVC' 카테고리의 다른 글
| 22.08.24 (0) | 2022.08.24 |
|---|---|
| 22.08.22 (0) | 2022.08.22 |
| 22.08.19 (0) | 2022.08.19 |
| 22.08.17 :: 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (0) | 2022.08.17 |
| 22.08.16 (0) | 2022.08.16 |