프로그래밍/Spring & Spring boot

[Springboot / 스프링부트] thymeleaf (2) 타임리프 제어문

pupu91 2022. 9. 26. 18:10
반응형

 

1. th:fi, th:unless

   - th:if는 변수 표현식의 OGNL(Object Graph Navigation Language)을 활용한 조건식으로 조건문을 작성하면 결과가 true       일 때 해당 태그의 범위가 처리 됨. 
   - th:unless는 표현식의 OGNL을 활용한 결과가 false일 때 해당 태그 범위가 처리 됨
<p th:if="${ num > 0}"> 넘어온 값은 0보다 크다.</p>
<p th:if="${ num < 0}"> 넘어온 값은 0보다 작다.</p>
<p th:unless="${ num < 0 }"> 넘어온 값은 0보다 작지 않다.</p>
    
<th:block th:if="${ str == '사과' }">
	<p>사과 좋아용</p>
</th:block>		
<th:block th:if="${ str == '바나나' }">
	<p>바나나 좋아용🍌🍌</p>
</th:block>

 

 

controller에서 넘긴 값
model.addAttribute("num", 1);
model.addAttribute("str", "바나나");

 

 

- &&, ||를 and, or를 사용해서 다중 조건 처리
<p th:if="${ num > 0 and num <=10 }">1부터 10까지의 양수</p>
<p th:if="${ str != null and str == '바나나' }">바나나 좋아요~~🍌🍌</p>

 

 

 

- 타임리프 Utility Objects에서 제공한는 #string메소드를 통해서 null에 대한 처리 가능
<p th:if="${ !#strings.isEmpty(str) and str == '바나나'}">바나나 좋아요!~!</p>

 

2. th:switch, th:case

  - th:switch와 th:case를 통해 해당 조건의 값이 어떤 case에 해당 되는지에 따라 태그를 선택할 수 있음
<th:block th:switch="${ str }">
	<span th:case="사과">사과가 선택 되었습니다.</span>
	<span th:case="바나나">바나나가 선택 되었습니다.</span>
</th:block>

 

3. th:each

    (1)  th:each로 반복문을 사용할 수 있음
<table border="1">
  <tr>
	<th>이름</th>
	<th>나이</th>
	<th>성별</th>
	<th>주소</th>
			
</tr> <!-- member는 변수명 -->
	<tr th:each="member :${ memberList }">
	<td th:text="${ member.name }"></td>
	<td th:text="${ member.age }"></td>
	<td th:text="${ member.gender }"></td>
	<td th:text="${ member.address }"></td>
</tr>	
</table>

 

 

 

    (2) th:each에 stat을 추가해서 반복 상태를 확인할 수 있음
index  0부터 시작하는 인덱스 값
count 1부터 시작하는 값
current  현재 객체의 정보
even 짝수 번째 데이터 여부
odd 홀수 번째 테이터 여부
first 첫 번째 데이터 여부
last 마지막 데이터 여부
<table border="1">
 <tr>
  <th>이름</th>
  <th>나이</th>
  <th>성별</th>
  <th>주소</th>
  <th>index</th>
  <th>count</th>
  <th>current</th>
  <th>even</th>
  <th>odd</th>
  <th>first</th>
  <th>last</th>
			
</tr> 
// 사용할 변수명, 두번째 변수는 stat로 변수 선언하여 사용
<tr th:each="member, stat :${ memberList }">
  <td th:text="${ member.name }"></td>
  <td th:text="${ member.age }"></td>
  <td th:text="${ member.gender }"></td>
  <td th:text="${ member.address }"></td>
  <td th:text="${ stat.index }"></td>
  <td th:text="${ stat.count }"></td>
  <td th:text="${ stat.current }"></td>
  <td th:text="${ stat.even }"></td>
  <td th:text="${ stat.odd }"></td>
  <td th:text="${ stat.first }"></td>
  <td th:text="${ stat.last }"></td>			
</tr>	
</table>

 

 

 

   (3) th: each에 stat을 변수로 선언하지 않으면 ' 변수명 + stat '로 반복 상태를 확인할 수 있음
<table border="1">
 <tr>
	<th>이름</th>
	<th>나이</th>
	<th>성별</th>
	<th>주소</th>
	<th>index</th>
	<th>count</th>
	<th>current</th>
	<th>even</th>
	<th>odd</th>
	<th>first</th>
	<th>last</th>			
</tr> 
<tr th:each="member :${ memberList }">
	<td th:text="${ member.name }"></td>
	<td th:text="${ member.age }"></td>
	<td th:text="${ member.gender }"></td>
	<td th:text="${ member.address }"></td>
	<td th:text="${ memberStat.index }"></td>
	<td th:text="${ memberStat.count }"></td>
	<td th:text="${ memberStat.current }"></td>
	<td th:text="${ memberStat.even }"></td>
	<td th:text="${ memberStat.odd }"></td>
	<td th:text="${ memberStat.first }"></td>
	<td th:text="${ memberStat.last }"></td>			
</tr>	
</table>

 

 

4. #numbers Utility Object를 이용하여 반복문 작성

<th:block th:each="num : ${ #numbers.sequence(5, 10)}">
	<a th:href="@{|numbering/${ numStat.count }|}" th:text="번호 + ${ num }"></a>	
</th:block>

 

 

반응형