텍스트 - text, utext
<span th:text=”${data}”> : HTML 콘텐츠에 데이터 출력
[[${data}]] : 컨텐츠 안에서 직접 출력
Escape
th:text, [[…]] 는 기본적으로 escape를 제공한다. < → < , > → >
unescaep를 사용하기 위해 th:utext, [(…)] 를 사용한다.
변수 - SpringEL
변수 표현식 : ${…}
Object
user.username : user의 username을 프로퍼티 접근 → user.getUsername()
user['username'] : 위와 같음 → user.getUsername()
user.getUsername() : user의 getUsername() 을 직접 호출
List
users[0].username : List에서 첫 번째 회원을 찾고 username 프로퍼티 접근 → list.get(0).getUsername()
users[0]['username'] : 위와 같음
users[0].getUsername() : List에서 첫 번째 회원을 찾고 메서드 직접 호출
Map
userMap['userA'].username : Map에서 userA를 찾고, username 프로퍼티 접근 → map.get("userA").getUsername()
userMap['userA']['username'] : 위와 같음
userMap['userA'].getUsername():Map에서 userA를 찾고 메서드 직접 호출
지역 변수 선언
<div th:with="first=${users[0]}">
<p>처음 사람의 이름은 <span th:text="${first.username}"></span></p>
th:with 사용. 선언한 태그 안에서만 사용 가능.
기본 객체들
HTTP 요청 파라미터 접근: param
ex) ${param.paramData}
HTTP 세션 접근: session
ex) ${session.sessionData}
스프링 빈 접근: @
ex) ${@helloBean.hello(’Spring!’)}
유틸리티 객체와 날짜
#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#appendix-bexpression-utility-objects
URL 링크
URL 생성 시 @{…} 사용
쿼리 파라미터
@{/hello(param1=${param1}, param2=${param2})}
→ /hello?param1=data1¶m2=data2
() 에 있는 부분은 쿼리 파라미터로 처리된다.
경로 변수
@{/hello/{param1}/{param2}(param1=${param1}, param2=${param2})}
→ /hello/data1/data2
URL 경로상에 변수가 있으면 () 부분은 경로 변수로 처리된다.
경로 변수 + 쿼리 파라미터
@{/hello/{param1}(param1=${param1}, param2=${param2})}
→ /hello/data1?param2=data2
경로 변수와 쿼리 파라미터를 함께 사용할 수 있다.
리터럴
리터럴은 소스 코드 상에서 고정된 값을 말한다.
공백 없이 쭉 이어진다면 하나의 의미있는 토큰으로 인지해서 다음과 같이 작은 따옴표를 생략할 수 있다.
룰: A-Z , a-z , 0-9 , [] , . , - , _
리터럴 대체(Literal substitutions)
<span th:text="|hello ${data}|">
마지막의 리터럴 대체 문법을 사용하면 마치 템플릿을 사용하는 것 처럼 편리하다.
연산
타임리프 연산은 자바와 크게 다르지 않다. HTML안에서 사용하기 때문에 HTML 엔티티를 사용하는 부분만 주의
비교연산: HTML 엔티티를 사용해야 하는 부분을 주의하자,
조건식: 자바의 조건식과 유사하다.
Elvis 연산자: 조건식의 편의 버전
No-Operation: nullData 이므로 no operation(_) 선택하여 기본 값 "데이터가 없습니다."가 출력된다.
속성 값 설정
th:* 속성을 지정하면 타임리프는 기존 속성을 th:* 로 지정한 속성으로 대체한다. 기존 속성이 없다면 새로 만든다.
<input type="text" name="mock" th:name="userA" />
→ 타임리프 렌더링 후 <input type="text" name="userA" />
th:attrappend : 속성 값의 뒤에 값을 추가한다.
th:attrprepend : 속성 값의 앞에 값을 추가한다.
th:classappend : class 속성에 자연스럽게 추가한다.
checked 처리
타임리프의 th:checked 는 값이 false 인 경우 checked 속성 자체를 제거한다.
<input type="checkbox" name="active" th:checked="false" />
→ 타임리프 렌더링 후: <input type="checkbox" name="active" />
반복
<tr th:each="user : ${users}">
for-each 문과 같이 users에서 값을 하나씩 꺼내서 실행.
Map 도 사용할 수 있는데 이 경우 변수에 담기는 값은 Map.Entry이다.
반복 상태
조건부 평가
주석
블록
자바스크립트 인라인
템플릿 조각
템플릿 레이아웃1
템플렛 레이아웃2