[ Frontend ]/JSP_Thymeleaf

[Thymeleaf] 기본 문법 (연산, 반복, if, 블록)

2023. 5. 4. 00:30
목차
  1. 연산
  2. 1. 산술 연산
  3. 2. 비교 연산
  4. 3. 조건식
  5. 4. Elvis 연산자
  6. 5. No-Operation
  7. 반복
  8. 1. 반복 출력 - th:each
  9. 반복 예제
  10. 2. 반복 상태 표현
  11. 반복 상태를 표현하는 변수들
  12. 조건부 평가 if, unless, switch
  13. 1. if, unless
  14. 2. switch
  15. 블록

연산

1. 산술 연산

<li><span th:text="10 + 2"></span></li> <!--12-->
<li><span th:text="10 % 2 == 0"></span></li> <!--true-->

2. 비교 연산

<li><span th:text="1 &gt; 10"></span></li> <!--false-->
<li><span th:text="1 gt 10"></span></li> <!--false-->
<li><span th:text="1 >= 10"></span></li> <!--false-->
<li><span th:text="1 ge 10"></span></li> <!--false-->
<li><span th:text="1 == 10"></span></li> <!--false-->
<li><span th:text="1 != 10"></span></li> <!--true-->
  • &gt; , gt (greater) = >
  • ge (greater or equal) = >=
  • lt (little) = <
  • le (little or equal) = <=와 같음
  • eq (equal) = =
  • ne (not equal) =!=

3. 조건식

  • (...)? A : B  : () 안이 true인지 false인지에 따라 각각 ' : '의 왼쪽, 오른쪽 반환
  • true일 때 : 왼쪽 반환
  • false일 때 : 오른쪽 반환
<li><span th:text="(10 % 2 == 0)?'짝수':'홀수'"></span></li> <!--짝수-->

4. Elvis 연산자

${data}?:"..."

  • 값이 존재하면 ${…} 값을 출력하고, null일 경우 :... 을 출력
String data = “Spring”;
String nullData = null;
<li><span th:text="${data}?: '데이터가없습니다.'"></span></li>
<li><span th:text="${nullData}?:'데이터가 없습니다.'"></span></li>

(출력)

Spring

데이터가 없습니다.


5. No-Operation

${data}?: _

  • 값이 존재하면 ${…} 값을 출력하고, null일 경우 : 타임리프가 없는 것처럼 동작한다.
  • 아래에서는 기본이 “데이터가 없습니다.” 문자열이다.
String data = “Spring”;
String nullData = null;
<li><span th:text="${data}?: _">데이터가 없습니다.</span></li>
<li><span th:text="${nullData}?: _">데이터가없습니다.</span></li>
  • 첫 번째 줄의 경우 data가 존재하므로 Spring을 출력한다.
  • 두 번째 줄은 data가 존재하지 않으므로 th:text="${nullData}?: _"이 없는 것처럼 동작한다.

반복

1. 반복 출력 - th:each

<tr th:each="user : ${users}"> (code) </tr>
  • 반복은 th:each를 사용한다. 이렇게 하면 반복문 안에서 user 변수를 사용할 수 있다.
  • ${users}의 컬렉션의 수만큼 <tr> 내부의 (code)가 하위 태그를 포함해서 생성된다.

반복 예제

<tr th:each="user : ${users}">
  • 반복 시 ${users}의 값을 하나씩 꺼내서 왼쪽 변수 user에 담아서 태그를 반복 실행한다.
  • th:each는 java.util.Iterable , java.util.Enumeration을 구현한 모든 객체에서 사용 가능하다.
  • Map도 사용할 수 있는데 이 경우 변수에 담기는 값은 Map.Entry이다.


2. 반복 상태 표현

<tr th:each="user, userStat : ${users}">
  • 기본과 똑같이 user에 ${users}가 하나씩 담긴다.
  • userStat은 반복의 상태를 담는다

반복 상태를 표현하는 변수들

  • index : 0부터 시작하는 값
  • count : 1부터 시작하는 값
  • size : 전체 사이즈
  • even, odd : 홀수, 짝수 여부 (boolean)
  • first, last : 처음, 마지막 여부 (boolean)
  • current : 현재 객체

<tr th:each="user: ${users}"> → userStat을 생략할 수 있다.

  • 생략하면 해당 값을 가져올 때, 단일 객체 이름(user) + Stat을 사용한다.
<table border="1">
    <tr>
        <th>count</th>
        <th>username</th>
        <th>age</th>
        <th>etc</th>
    </tr>
    <tr th:each="user, userStat : ${users}">
        <td th:text="${userStat.count}">username</td>
        <td th:text="${user.username}">username</td>
        <td th:text="${user.age}">0</td>
        <td>
            index = <span th:text="${userStat.index}"></span>
            count = <span th:text="${userStat.count}"></span>
            size = <span th:text="${userStat.size}"></span>
            even? = <span th:text="${userStat.even}"></span>
            odd? = <span th:text="${userStat.odd}"></span>
            first? = <span th:text="${userStat.first}"></span>
            last? = <span th:text="${userStat.last}"></span>
            current = <span th:text="${userStat.current}"></span>
        </td>
    </tr>
</table>


조건부 평가 if, unless, switch

1. if, unless

<span th:text="'미성년자'" th:if="${user.age lt 20}"></span>
  • lt = <
  • ge = >=

th:if를 사용했을 때, 타임리프는 해당 조건이 맞지 않으면 태그 자체를 렌더링 하지 않는다.

만약 조건이 false 인 경우 <span>... <span> 자체를 렌더링 되지 않고 사라진다.

 

(ex) 아래 두 개는 같은 조건이다.

if : user.age < 20 일 때 출력
unless : user.age >= 20 이 아닐 때 출력

만약 user.age가 18이면 둘 다 출력되고, 23이면 둘 다 출력되지 않을 것이다.

<span th:text="'미성년자'" th:if="${user.age lt 20}"></span>
<span th:text="'미성년자'" th:unless="${user.age ge 20}"></span>

2. switch

th:switch , th:case

<td th:switch="${user.age}">
    <span th:case="10">10살</span>
    <span th:case="20">20살</span>
    <span th:case="*">기타</span>
</td>

th:case="*" : default


블록

th:block 은 HTML 태그가 아닌 타임리프의 유일한 자체 태그다.

  • 여러 개의 태그를 한 번에 반복문을 사용해야 할 때 사용한다.
<th:block th:each="user : ${users}">
    <div>
        사용자 이름1 <span th:text="${user.username}"></span>
        사용자 나이1 <span th:text="${user.age}"></span>
    </div>
    <div>
        요약 <span th:text="${user.username} + ' / ' + ${user.age}"></span>
    </div>
</th:block>

출력

사용자 이름1 UserA 사용자 나이1 10
요약 UserA / 10
사용자 이름1 UserB 사용자 나이1 20
요약 UserB / 20
사용자 이름1 UserC 사용자 나이1 30
요약 UserC / 30

 


(참고) 김영한 님 인프런 Spring MVC-2
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2
반응형

'[ Frontend ] > JSP_Thymeleaf' 카테고리의 다른 글

[JSP] JSP, 자바 웹프로젝트 환경설정 (IntelliJ, gradle, Tomcat)  (0) 2023.08.01
[JSP] JSP 간단 정리  (0) 2023.08.01
[Thymeleaf, html, bootstrap] 자주 사용하는 태그 모음  (0) 2023.04.22
[Thymeleaf] 기본객체, 유틸리티 객체  (0) 2023.04.21
[Thymeleaf] 기본 문법 (text, 변수표현, URL 링크, 리터럴)  (0) 2023.04.20
  1. 연산
  2. 1. 산술 연산
  3. 2. 비교 연산
  4. 3. 조건식
  5. 4. Elvis 연산자
  6. 5. No-Operation
  7. 반복
  8. 1. 반복 출력 - th:each
  9. 반복 예제
  10. 2. 반복 상태 표현
  11. 반복 상태를 표현하는 변수들
  12. 조건부 평가 if, unless, switch
  13. 1. if, unless
  14. 2. switch
  15. 블록
'[ Frontend ]/JSP_Thymeleaf' 카테고리의 다른 글
  • [JSP] JSP, 자바 웹프로젝트 환경설정 (IntelliJ, gradle, Tomcat)
  • [JSP] JSP 간단 정리
  • [Thymeleaf, html, bootstrap] 자주 사용하는 태그 모음
  • [Thymeleaf] 기본객체, 유틸리티 객체
HSRyuuu
HSRyuuu
Web Backend Developer happyhsryu
HSRyuuu
HS_dev_log
HSRyuuu
전체
오늘
어제
  • 전체 글 보기 (234) N
    • Java (25)
    • Spring (28) N
    • JPA & QueryDSL (13)
    • Database (17)
    • 자료구조 & 알고리즘 (30)
    • DevOps (10)
    • [ Computer Science ] (47)
      • Web & Network (14)
      • 프로그래밍 이론 (11)
      • 운영체제 (3)
      • 데이터베이스 이론 (5)
      • Linux 리눅스 (7)
    • [ Frontend ] (17)
      • Vue.js & Nuxt.js (9)
      • JSP_Thymeleaf (7)
    • [ 기타 ] (47)
      • 오픈소스 라이브러리 (5)
      • 코딩테스트 (13)
      • Trouble Shooting (7)
      • Tech Interview (6)
      • Book Review (9)
      • 끄적끄적... (5)
      • 개인 프로젝트 (2)

블로그 메뉴

  • 홈
  • 태그
  • github

공지사항

  • GitHub
  • 공부한 내용을 정리하고 기록하는 블로그 입니다.

인기 글

태그

  • 백엔드공부
  • MySQL
  • 리눅스
  • SQL
  • Database
  • Spring
  • Redis
  • HTTP
  • SpringBoot
  • 클린코드
  • 백엔드기술면접
  • 백준
  • 자료구조
  • springsecurity
  • Nuxt3
  • 트랜잭션
  • TechInterview
  • Java
  • Linux
  • 개발자
  • 제로베이스
  • JPA
  • 기술면접
  • mybatis
  • web
  • 백엔드스쿨
  • 백엔드
  • cleancode
  • Redisson
  • vue3

최근 댓글

최근 글

hELLO · Designed By 정상우.
HSRyuuu
[Thymeleaf] 기본 문법 (연산, 반복, if, 블록)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.