BackEnd/Thymeleaf

[Thymeleaf] 조건부 평가

샤아이인 2022. 1. 27.

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다.

 

조건부 평가

조건부 평가는 말 그대로 if 문과 같이 어떤 문장이 참일경우 실행하는 것 이다.

if, unless(if의 반대) 2가지 가 있다.

 

간단한 컨트롤러는 다음과 같다.

@GetMapping("/condition")
public String condition(Model model){
    List<User> list = new ArrayList<>();
    list.add(new User("UserA", 10));
    list.add(new User("UserB", 20));
    list.add(new User("UserC", 30));

    model.addAttribute("users", list);

    return "basic/condition";
}
 

이를 처리하는 뷰는 다음과 같다.

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>if, unless</h1>
<table border="1">
    <tr>
        <th>count</th>
        <th>username</th>
        <th>age</th>
    </tr>
    <tr th:each="user, userStat : ${users}">
        <td th:text="${userStat.count}">1</td>
        <td th:text="${user.username}">username</td>
        <td>
            <span th:text="${user.age}">0</span>
            <span th:text="'미성년자'" th:if="${user.age lt 20}"></span>
            <span th:text="'미성년자'" th:unless="${user.age ge 20}"></span>
        </td>
    </tr>
</table>

<h1>switch</h1>
<table border="1">
    <tr>
        <th>count</th>
        <th>username</th>
        <th>age</th>
    </tr>
    <tr th:each="user, userStat : ${users}">
        <td th:text="${userStat.count}">1</td>
        <td th:text="${user.username}">username</td>
        <td th:switch="${user.age}">
            <span th:case="10">10살</span>
            <span th:case="20">20살</span>
            <span th:case="*">기타</span>
        </td>
    </tr>
</table>

</body>
</html>
 

실행 결과는 다음과 같습니다.

▶ if, unless

타임리프는 해당 조건이 맞지 않는경우 태그 자체를 렌더링하지 않는다. 그냥 태그 자체가 없어진다. 다음 코드를 살펴보자.

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

예를 들어 위와 같은 태그가 있으면, 나이가 26일경우 if문이 false가 되며, <span>...<span> 부분 자체가 렌더링 되지 않고 사라진다.

 

▶ switch case 문

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

위 코드와 같이 switc-case문 또한 가능하다. *는 만족하는 조건이 없을때 사용하는 디폴트 값 이다.

 

위 결과값의 소스코드를 보면 다음과 같다.

잘 보면 <span>이 해당되는 부분 말고는 통체로 사라진것을 볼수 있다.

'BackEnd > Thymeleaf' 카테고리의 다른 글

[Thymeleaf] 블록  (0) 2022.01.28
[Thymeleaf] 주석  (0) 2022.01.28
[Thymeleaf] 반복  (0) 2022.01.27
[Thymeleaf] 속성 값 설정  (0) 2022.01.27
[Thymeleaf] 연산  (0) 2022.01.26

댓글