본문 바로가기

Advance I/Spring MVC

22.08.20

유틸리티 객체와 날짜

타임리프는 문자, 숫자, 날짜, 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

 

유틸리티 객체 예시

https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#appendix-b-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&param2=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