-
Spring MVC - 타임리프(Thymeleaf) 리터럴과 연산Spring/Spring MVC 2022. 2. 2. 21:26728x90반응형
리터럴
리터럴은 소스 코드상에서 고정된 값을 말한다.
String a = "Hello" int a = 10 * 20
위 코드에서 "Hello"는 문자 리터럴, 10, 20은 숫자 리터럴이다.
타임리프 문자 리터럴
문자 리터럴
- 문자 리터럴은 항상 '(작은 따옴표)로 감싸야 한다.
- 공백 없는 문자 리터럴은 하나의 토큰으로 인지되어 작은 따옴표 생략 가능하다
"hello" -> 작은 따옴표 생략 가능, "hello world" -> 작은 따옴표 생략 불가능
<li>'hello' + ' world!' = <span th:text="'hello' + ' world!'"></span></li> <li>'hello world!' = <span th:text="'hello world!'"></span></li> <li>'hello ' + ${data} = <span th:text="'hello ' + ${data}"></span></li>
서버를 가동시켜 웹브라우저에서 HTML의 소스 코드를 보면 다음과 같다.
<li>'hello' + ' world!' = <span>hello world!</span></li> <li>'hello world!' = <span>hello world!</span></li> <li>'hello ' + ${data} = <span>hello Spring!</span></li>
리터럴 대체 문법
- 리터럴 대체 문법을 사용하면, 더하기 연산 없이 편리하게 사용할 수 있다.
- " | ..... | "
<li>리터럴 대체 |hello ${data}| = <span th:text="|hello ${data}|"></span></li>
서버를 가동시켜 웹브라우저에서 HTML의 소스 코드를 보면 다음과 같다.
<li>리터럴 대체 |hello ${data}| = <span>hello Spring!</span></li>
타임리프 연산
타임리프의 연산은 자바와 크게 다르지 않다. 하지만 HTML 안에서 사용하기 때문에 HTML 엔티티를 사용하는 부분만 주의하면 된다.
비교연산
연산자를 그냥 써도 되지만 혹시나 이스케이프가 될 수 있기때문에 가능한 HTML 엔티티 연산자를 사용하는 것을 권장한다.
연산자 HTML 엔티티 연산자 > gt < lt >= ge <= le ! not == eq != neq, ne <li>1 > 10 = <span th:text="1 > 10"></span></li> <li>1 > 10 = <span th:text="1 > 10"></span></li> <li>1 gt 10 = <span th:text="1 gt 10"></span></li> <li>1 >= 10 = <span th:text="1 >= 10"></span></li> <li>1 ge 10 = <span th:text="1 ge 10"></span></li> <li>1 == 10 = <span th:text="1 == 10"></span></li> <li>1 != 10 = <span th:text="1 != 10"></span></li>
서버를 가동시켜 웹브라우저에서 HTML의 소스 코드를 보면 다음과 같다.
<li>1 > 10 = <span>false</span></li> <li>1 > 10 = <span>false</span></li> <li>1 gt 10 = <span>false</span></li> <li>1 >= 10 = <span>false</span></li> <li>1 ge 10 = <span>false</span></li> <li>1 == 10 = <span>false</span></li> <li>1 != 10 = <span>true</span></li>
조건식과 Elvis 연산자
- 자바의 조건식과 유사하다
- Elvis 연산자는 조건식의 편의 버전이다.
- [데이터1] ?: [데이터2]
- 데이터1에 null 아닌 데이터 값이 있으면 데이터1 출력, 값이 없으면 데이터2 출력
<!-- 조건식 --> <li>(10 % 2 == 0)? '짝수':'홀수' = <span th:text="(10 % 2 == 0)? '짝수':'홀수'"></span></li> <!- Elvis 연산자 --> <li>${data}?: '데이터가 없습니다.' = <span th:text="${data}?: '데이터가 없습니다.'"></span></li> <li>${nullData}?: '데이터가 없습니다.' = <span th:text="${nullData}?: '데이터가 없습니다.'"></span></li>
서버를 가동시켜 웹브라우저에서 HTML의 소스 코드를 보면 다음과 같다.
<li>(10 % 2 == 0)? '짝수':'홀수' = <span>짝수</span></li> <li>${data}?: '데이터가 없습니다.' = <span>Spring!</span></li> <li>${nullData}?: '데이터가 없습니다.' = <span>데이터가 없습니다.</span></li>
No-Operation ( _ )
- _ 인 경우 조건에 따라 마치 타임리프가 실행되지 않는 것처럼 동작한다
<li>${data}?: _ = <span th:text="${data}?: _">데이터가 없습니다.</span></li> <li>${nullData}?: _ = <span th:text="${nullData}?: _">데이터가 없습니다.</span></li>
서버를 가동시켜 웹브라우저에서 HTML의 소스 코드를 보면 다음과 같다.
<li>${data}?: _ = <span>Spring!</span></li> <li>${nullData}?: _ = <span>데이터가 없습니다.</span></li>
nullData에 null 값이 들어갔으므로 Elvis 연산자에 의해서 No-Operation( _ ) 이 선택되어 원래 HTML의 내용 그대로 출력된 것을 확인할 수 있다
728x90반응형'Spring > Spring MVC' 카테고리의 다른 글
Spring MVC - 타임리프(Thymeleaf) 블록과 자바스크립트 인라인 (0) 2022.02.03 Spring MVC - 타임리프(Thymeleaf) 반복 기능(th:each), 조건부 기능(th:if, th:unless, th:switch) (0) 2022.02.03 Spring MVC - 타임리프(Thymeleaf) URL 링크 표현식 (0) 2022.02.02 Spring MVC - 타임리프(Thymeleaf) 유틸리티 객체(문자, 숫자, 날짜, URI), 날짜 유틸리티 객체(#temporals) (0) 2022.02.02 Spring MVC - 타임리프(Thymeleaf)가 제공하는 기본 객체와 편의 객체 (0) 2022.02.02