Search
Duplicate

์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ฐ์ฒด

์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ฐ์ฒด(Utility Objects)?

ํƒ€์ž„๋ฆฌํ”„ ํ…œํ”Œ๋ฆฟ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
ํ‘œํ˜„์‹์—์„œ # ๋’ค์— ์˜ค๋Š” ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
๊ฐ์ฒด๋ช…
์„ค๋ช…
#dates
๋‚ ์งœ/์‹œ๊ฐ„ ํฌ๋งท ๋ฐ ์กฐ์ž‘
#strings
๋ฌธ์ž์—ด ์กฐ์ž‘
#numbers
์ˆซ์ž ํฌ๋งทํŒ…
#calendars
Calendar ๊ด€๋ จ ๊ธฐ๋Šฅ
#lists
List ์ปฌ๋ ‰์…˜ ๊ด€๋ จ
#sets
Set ์ปฌ๋ ‰์…˜ ๊ด€๋ จ
#maps
Map ์ปฌ๋ ‰์…˜ ๊ด€๋ จ
#bools
Boolean ๊ด€๋ จ
#ids
HTML id ์ƒ์„ฑ
#uris
URI ๋นŒ๋“œ
#vars
์ง€์—ญ ๋ณ€์ˆ˜ ๊ด€๋ จ
#objects
๊ฐ์ฒด ๊ฒ€์‚ฌ (null ๋“ฑ)

๋‚ด์žฅ ๊ฐ์ฒด (Built-in)

Thymeleaf ๋‚ด๋ถ€์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต๋˜๋Š” ๊ฐ์ฒด๋“ค:
๊ฐ์ฒด
์˜ˆ์‹œ
์„ค๋ช…
${#ctx}
${#ctx.locale}
์ „์ฒด ์ปจํ…์ŠคํŠธ ์ •๋ณด
${#http}
${#httpServletRequest.contextPath}
HTTP ๊ด€๋ จ ์ •๋ณด
${#session}
${#session.user}
์„ธ์…˜ ์ •๋ณด
${#request}
${#request.param.name}
Request ์ •๋ณด
${#response}
-
Response ๊ด€๋ จ

์ž์ฃผ ์“ฐ๋Š” ์œ ํ‹ธ ์˜ˆ์‹œ

๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ โ€“ #strings

<span th:text="${#strings.toUpperCase(user.name)}"></span>
HTML
๋ณต์‚ฌ
ํ•จ์ˆ˜
์„ค๋ช…
toUpperCase()
๋Œ€๋ฌธ์ž
toLowerCase()
์†Œ๋ฌธ์ž
contains(str, part)
ํฌํ•จ ์—ฌ๋ถ€
substring(str, start, end)
๋ถ€๋ถ„ ๋ฌธ์ž์—ด

์ˆซ์ž ํฌ๋งทํŒ… โ€“ #numbers

<p th:text="${#numbers.formatDecimal(price, 2, 'POINT')}"></p>
HTML
๋ณต์‚ฌ
ํ•จ์ˆ˜
์„ค๋ช…
formatInteger()
์ •์ˆ˜ ํฌ๋งท
formatDecimal()
์†Œ์ˆ˜์  ํฌ๋งท
round()
๋ฐ˜์˜ฌ๋ฆผ

๋‚ ์งœ/์‹œ๊ฐ„ โ€“ #dates

<p th:text="${#dates.format(order.date, 'yyyy-MM-dd')}"></p>
HTML
๋ณต์‚ฌ
ํ•จ์ˆ˜
์„ค๋ช…
format(java.util.Date, pattern)
๋‚ ์งœ ํฌ๋งทํŒ…
parse(string, pattern)
๋‚ ์งœ ํŒŒ์‹ฑ

๋ฆฌ์ŠคํŠธ/์ปฌ๋ ‰์…˜ โ€“ #lists, #sets, #maps

<ul> <li th:each="item : ${#lists.sort(products, 'price')}"> <span th:text="${item.name}"></span> </li> </ul>
HTML
๋ณต์‚ฌ
๊ธฐ๋Šฅ
์˜ˆ
๋ฆฌ์ŠคํŠธ ์ •๋ ฌ
#lists.sort(list, 'field')
Set ๋ณ€ํ™˜
#sets.newHashSet(...)
Map ๊ฐ’ ํ˜ธ์ถœ
${#maps.get(map, 'key')}

์กฐ๊ฑด/๊ฐ์ฒด ๊ฒ€์‚ฌ โ€“ #objects, #bools

<p th:if="${#objects.nonNull(user)}">Hello!</p>
HTML
๋ณต์‚ฌ
ํ•จ์ˆ˜
์„ค๋ช…
nonNull(obj)
Null ์•„๋‹Œ์ง€
isEmpty(obj)
๋น„์–ด์žˆ๋Š”์ง€
isTrue(expr)
Boolean ๊ฒ€์‚ฌ

ID ์œ ์ผ ์ƒ์„ฑ โ€“ #ids

<input th:id="${#ids.next('input_')}" />
HTML
๋ณต์‚ฌ
์œ ๋‹ˆํฌํ•œ id ๊ฐ’ ์ž๋™ ์ƒ์„ฑ

URI ๋นŒ๋“œ โ€“ #uris

<a th:href="${#uris.uri('/posts/{id}', id=post.id)}">View</a>
HTML
๋ณต์‚ฌ
REST API, ๋งํฌ ๋นŒ๋“œ์— ์œ ์šฉ

์‹ค์ „ ์˜ˆ์ œ โ€“ ์ข…ํ•ฉ

<!DOCTYPE html> <html lang="ko" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>Example List</title> </head> <body> <h2 th:text="${#strings.toUpperCase('์ƒํ’ˆ ๋ชฉ๋ก')}"></h2> <table> <tr><th>์ด๋ฆ„</th><th>๊ฐ€๊ฒฉ</th><th>๋“ฑ๋ก์ผ</th></tr> <tr th:each="p : ${products}"> <td th:text="${p.name}"></td> <td th:text="${#numbers.formatDecimal(p.price,2,'POINT')}"></td> <td th:text="${#dates.format(p.createdAt, 'yyyy-MM-dd')}"></td> </tr> </table> </body> </html>
HTML
๋ณต์‚ฌ

์ฃผ์š” ๋ฒ”์ฃผ

๋ฒ”์ฃผ
์ฃผ ์‚ฌ์šฉ ๊ธฐ๋Šฅ
๋ฌธ์ž์—ด
๋Œ€/์†Œ๋ฌธ์ž, ํฌํ•จ, ์ž๋ฅด๊ธฐ
์ˆซ์ž
ํฌ๋งท, ๋ฐ˜์˜ฌ๋ฆผ
๋‚ ์งœ
ํฌ๋งท, ํŒŒ์‹ฑ
์ปฌ๋ ‰์…˜
์ •๋ ฌ, ํ•„๋“œ ์ ‘๊ทผ
๊ฐ์ฒด
null/empty ๊ฒ€์‚ฌ
URI/ID
๋งํฌ ์ƒ์„ฑ, ์œ ๋‹ˆํฌ ID