본문 바로가기

Spring

스프링mvc2편 타임리프 - 기본기능 : 반복

인프런 김영한 강사님의 스프링 mvc2편을 보고 정리한 내용입니다.

무엇을 배웠나요?

  • 타임리프에서 반복은 th:each 를 사용한다. 추가로 반복에서 사용할 수 있는 여러 상태 값을 지원한다.
  • <tr th:each="user : ${users}"> : 반복시 오른쪽 컬렉션 ${users}의 값을 하나씩 꺼내서 왼쪽 변수(user)에 담아서 태그를 반복 실행합니다.
  • th:each 는 List 뿐만 아니라 배열, java.util.Iterable, java.util.Enumeration을 구현한 모든 객체를 반복에 사용할 수 있습니다. Map도 사용할 수 있는데 이 경우 변수에 담기는 값은 Map.Entry입니다(자바에서 반복문을 돌릴수 있는 것들은 웬만해서는 전부 가능)
  • 이때 Entry는 key와 value를 같이 가지고 있는 객체
  • <tr th:each="user, userStat : ${users}"> 같이 반복의 두번째 파라미터를 설정해서 반복의 상태를 확인할 수 있습니다. 두번째 파라미터는 생략가능한데 생략하면 지정한 벼눗명(user)+ Stat 가 됩니다.
  • 여기서는 user + Stat = userStat 이므로 생략이 가능합니다.
  • 반복상태 유지 기능
    • index : 0부터 시작하는 값
    • count: 1부터 시작하는 값
    • size : 전체 사이즈
    • even, odd : 홀수, 짝수 여부(boolean)
    • first, last : 처음, 마지막 여부(boolean)
    • current : 현재 객체

궁금한 점은 무엇인가요?

더 필요하다고 생각한 것이 있나요?

코드

<tr th:each="user : ${users}">
    <td th:text="${user.username}">username</td>
    <td th:text="${user.age}">0</td>
</tr>

<h1>반복 상태 유지</h1>
<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>