• Home
  • About
    • back
    • ming photo

      ming

      studying

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Archive
    • back
    • All Posts
    • All Tags
    • All categories
  • categories
    • back
    • HTML+CSS+JavaScript
    • JAVA
    • Algorithm
    • DB
    • JSP
    • μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬
    • Spring
    • Thymeleaf
    • κΈ°μˆ λ©΄μ ‘
  • Projects

Thymeleaf - Getting started with the Standard dialects in 5 minutes

08 Jun 2021

πŸ”·Thymeleaf - Getting started with the Standard dialects in 5 minutes

βœ” 1. Standard dialects?

- ThymeleafλŠ” μΌμ’…μ˜ μžλ°” 라이브러리둜 , μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ˜ν•΄ μƒμ„±λœ HTML, XML, JavaScript, CSS 및 일반 ν…μŠ€νŠΈλ₯Ό ν‘œμ‹œν•˜κΈ° μœ„ν•΄ ν…œν”Œλ¦Ώ νŒŒμΌμ„ λ³€ν™˜ν•΄μ£ΌλŠ” ν…œν”Œλ¦Ώ 엔진이닀
- ThymeleafλŠ” ν™•μž₯이 μš©μ΄ν•˜κ³  μ‚¬μš©μžκ°€ μ›ν•˜λŠ” μ΄λ¦„μœΌλ‘œ μžμ‹ λ§Œμ˜ ν…œν”Œλ¦Ώ 속성, νƒœκ·Έλ₯Ό μ •μ˜ν•˜κ³ 
μ›ν•˜λŠ” κ΅¬λ¬Έμ—μ„œ μ›ν•˜λŠ” ν‘œν˜„μ‹κ³Ό λ‘œμ§μ„ μ μš©ν•  수 μžˆλ‹€

βœ” 2. Standard Expression syntax

- Thymeleafμ—μ„œ μ‚¬μš©ν•˜λŠ” ν‘œν˜„μ‹
  ✏ ${...} : Variable expressions(λ³€μˆ˜ ν‘œν˜„μ‹)
  ✏ *{...} : Selection expressions(선택 ν‘œν˜„μ‹)
  ✏ #{...} : Message (i18n) expressions(λ©”μ„Έμ§€ ν‘œν˜„μ‹)
  ✏ @{...} : Link (URL) expressions(링크(URL) ν‘œν˜„μ‹)
  ✏ ~{...} : Fragment expressions (쑰각 ν‘œν˜„μ‹)

βœ” 2.1 Variable expressions(λ³€μˆ˜ ν‘œν˜„μ‹)

- λ³€μˆ˜ ν‘œν˜„μ‹μ€ OGNL ν‘œν˜„μ‹ (λ˜λŠ” Thymeleafλ₯Ό Springκ³Ό ν†΅ν•©ν•˜λŠ” 경우 Spring EL)이며 μ»¨ν…μŠ€νŠΈ λ³€μˆ˜μ—μ„œ μ‹€ν–‰λ˜λ©° Spring μš©μ–΄λ‘œ model Attribute λΌκ³ λ„ν•©λ‹ˆλ‹€.
- ${session.user.name}
- <span th:text="${book.author.name}">
- ν‘œν˜„μ‹μ€ λ‹€μŒκ³Ό λ™μΌν•©λ‹ˆλ‹€
- ((Book)context.getVariable("book")).getAuthor().getName()
-좜λ ₯뿐만 μ•„λ‹ˆλΌ 쑰건, 반볡과 같은 λ³€μˆ˜ ν‘œν˜„μ‹μ„ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.
- <li th:each="book : ${books}">
- μ—¬κΈ°μ„œ $ {books}λŠ” μ»¨ν…μŠ€νŠΈμ—μ„œ booksλΌλŠ” λ³€μˆ˜λ₯Ό μ„ νƒν•˜κ³  th : each λ£¨ν”„μ—μ„œ 반볡

βœ” 2.2 Selection expressions(선택 ν‘œν˜„μ‹)

- 선택 ν‘œν˜„μ‹ 선택 ν‘œν˜„μ‹μ€ 전체 μ»¨ν…μŠ€νŠΈ λ³€μˆ˜ λ§΅ λŒ€μ‹  이전에 μ„ νƒν•œ κ°μ²΄μ—μ„œ μ‹€ν–‰λœλ‹€λŠ” 점을 μ œμ™Έν•˜λ©΄ λ³€μˆ˜ ν‘œν˜„μ‹κ³Ό κ°™μŠ΅λ‹ˆλ‹€.
- *{customer.name}
- 그듀이 μž‘λ™ν•˜λŠ” κ°μ²΄λŠ” th : object 속성에 μ˜ν•΄ μ§€μ •λ©λ‹ˆλ‹€
- <div th:object="${book}">
  ...
  <span th:text="*{title}">...</span>
  ...
  </div>
- { // th:object="${book}" final Book selection = (Book) context.getVariable("book"); // th:text="*{title}" output(selection.getTitle()); }

βœ” 2.3 Message (i18n) expressions(λ©”μ„Έμ§€ ν‘œν˜„μ‹)

- λ³€μˆ˜ ν‘œν˜„μ‹. 객체 ν‘œν˜„μ‹μœΌλ‘œ 봐도 λœλ‹€
- λ©”μ‹œμ§€ ν‘œν˜„μ‹ 을 μ‚¬μš©ν•˜λ©΄ μ™ΈλΆ€ μ†ŒμŠ€ (.properties 파일)μ—μ„œ λ‘œμΌ€μΌ νŠΉμ • λ©”μ‹œμ§€λ₯Ό κ²€μƒ‰ν•˜μ—¬ ν‚€λ‘œ μ°Έμ‘°ν•˜κ³  (μ„ νƒμ μœΌλ‘œ) 맀개 λ³€μˆ˜ μ„ΈνŠΈλ₯Ό 적용 ν•  수 μžˆμŠ΅λ‹ˆλ‹€..
- #{main.title}
- #{message.entrycreated(${entryId})}
- λ‹€μŒκ³Ό 같은 ν…œν”Œλ¦Ώμ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.
- <table>
  ...
  <th th:text="#{header.address.city}">...</th>
  <th th:text="#{header.address.country}">...</th>
  ...
  </table>
- μ»¨ν…μŠ€νŠΈ λ³€μˆ˜μ˜ κ°’μœΌλ‘œ λ©”μ‹œμ§€ ν‚€λ₯Ό κ²°μ •ν•˜κ±°λ‚˜ λ³€μˆ˜λ₯Ό 맀개 λ³€μˆ˜λ‘œ μ§€μ •ν•˜λ €λŠ” 경우 λ©”μ‹œμ§€ ν‘œν˜„μ‹ λ‚΄μ—μ„œ λ³€μˆ˜ ν‘œν˜„μ‹μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
- #{${config.adminWelcomeKey}(${session.user.name})}

βœ” 2.4 Link (URL) expressions(링크(URL) ν‘œν˜„μ‹)

- 링크 ν‘œν˜„μ‹μ€ URL을 μž‘μ„±ν•˜κ³  μœ μš©ν•œ μ»¨ν…μŠ€νŠΈ 및 μ„Έμ…˜ 정보λ₯Ό μΆ”κ°€ν•˜κΈ°μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€(일반적으둜 URL 재 μž‘μ„±μ΄λΌκ³ ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€)
- <a th:href="@{/order/list}">...</a>
- <a href="/myapp/order/list">...</a>
- μ„Έμ…˜μ„ μœ μ§€ν•΄μ•Όν•˜κ³  μΏ ν‚€κ°€ ν™œμ„±ν™”λ˜μ§€ μ•Šμ€ 경우 (λ˜λŠ” μ„œλ²„κ°€ 아직 μ•Œμ§€ λͺ»ν•˜λŠ” 경우)
- <a href="/myapp/order/list;sessionid=23fa31abd41ea093">...</a>
- URL은 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
- <a th:href="@{/order/details(id=${orderId},type=${orderType})}">...</a>
- // κ²°κ³Ό
  <!-- Note ampersands (&) should be HTML-escaped in tag attributes... -->
  <a href="/myapp/order/details?id=23&amp;type=online">...</a>
- 링크 ν‘œν˜„μ‹μ€ μƒλŒ€μ  일 수 있으며,이 경우 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ»¨ν…μŠ€νŠΈκ°€ URL μ•žμ— λΆ™μ§€ μ•ŠμŠ΅λ‹ˆλ‹€
- <a th:href="@{../documents/report}">...</a>
- λ˜ν•œ μ„œλ²„μ— μƒλŒ€μ μž…λ‹ˆλ‹€ (λ‹€μ‹œ λ§ν•˜λ©΄ 접두사가 뢙을 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ»¨ν…μŠ€νŠΈ μ—†μŒ).
- <a th:href="@{~/contents/main}">...</a>
- ν”„λ‘œν† μ½œ κΈ°μ€€ (μ ˆλŒ€ URLκ³Ό λ™μΌν•˜μ§€λ§Œ λΈŒλΌμš°μ €λŠ” ν‘œμ‹œλ˜λŠ” νŽ˜μ΄μ§€μ—μ„œ μ‚¬μš©λ˜λŠ” 것과 λ™μΌν•œ HTTP λ˜λŠ” HTTPS ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•¨)
- <a th:href="@{//static.mycompany.com/res/initial}">...</a>
- <a th:href="@{//static.mycompany.com/res/initial}">...</a>

βœ” 2.5 Fragment expressions (쑰각 ν‘œν˜„μ‹)

- 쑰각 식은 νƒœκ·Έ 쑰각을 ν‘œν˜„ν•˜κ³  ν…œν”Œλ¦Ώμ—μ„œ μ‰½κ²Œ 이동할 μˆ˜μžˆλŠ” λ°©λ²•μž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ 식 덕뢄에 쑰각을 λ³΅μ œν•˜κ³  λ‹€λ₯Έ ν…œν”Œλ¦Ώμ— 인수둜 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.
- κ°€μž₯ 일반적인 μš©λ„λŠ” th:insert or th:replace:
- <div th:insert="~{commons :: main}">...</div>
- κ·ΈλŸ¬λ‚˜ λ‹€λ₯Έ λ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μ–΄λ””μ„œλ‚˜ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
- <div th:with="frag=~{footer :: #main/text()}">
  <p th:insert="${frag}"></p>
  </div>

βœ” 2.6 Literals and operations

- λ‹€μ–‘ν•œ μœ ν˜•μ˜ λ¦¬ν„°λŸ΄ 및 연산을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  - λ¦¬ν„°λŸ΄ :
      ν…μŠ€νŠΈ λ¦¬ν„°λŸ΄ : 'one text', 'Another one!', ...
      숫자 λ¦¬ν„°λŸ΄ : 0, 34, 3.0, 12.3, ...
      λΆ€μšΈ λ¦¬ν„°λŸ΄ : true,false
      널 λ¦¬ν„°λŸ΄ : null
      λ¦¬ν„°λŸ΄ 토큰 : one, sometext, main, ...

  - ν…μŠ€νŠΈ μž‘μ—… :
      λ¬Έμžμ—΄ μ—°κ²° : +
      λ¦¬ν„°λŸ΄ λŒ€μ²΄ : |The name is ${name}|

  - μ‚°μˆ  μ—°μ‚° :
      이진 μ—°μ‚°μž : +, -, \*, /,%
      λΉΌκΈ° 기호 (단항 μ—°μ‚°μž) : -
  - λΆ€μšΈ μ—°μ‚° :
      이항 μ—°μ‚°μž : and,or
      λΆ€μšΈ λΆ€μ • (단항 μ—°μ‚°μž) : !,not
  - 비ꡐ와 평등 :
      비ꡐ기 : >, <, >=, <=( gt, lt, ge, le)
      κ°™μŒ μ—°μ‚°μž : ==, !=( eq, ne)
  - 쑰건뢀 μ—°μ‚°μž :
      κ·Έλ ‡λ‹€λ©΄ : (if) ? (then)
      κ·Έλ ‡μ§€ μ•Šμ€ 경우 : (if) ? (then) : (else)
      κΈ°λ³Έ: (value) ?: (defaultvalue)

βœ” 2.7 Expression preprocessing

- 식에 λŒ€ν•΄ μ•Œμ•„μ•Ό ν•  λ§ˆμ§€λ§‰ 사항은 λ‹€μŒκ³Ό 같이 사이 에 μ§€μ •λœ 식 μ „μ²˜λ¦¬ λΌλŠ” 것이 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ __.
- #{selection.__${sel.code}__}

βœ” 3. Some basic attributes

- <p th:text="#{msg.welcome}">Welcome everyone!</p>
- <li th:each="book : ${books}" th:text="${book.title}">En las Orillas del Sar</li>
- <form th:action="@{/createOrder}"></form>
- <input type="button" th:value="#{form.submit}" />
- <a th:href="@{/admin/users}"></a>


Share Tweet +1