유틸리티 객체는 기존처럼 메서드를 호출하는 방식으로 사용할 수 있는 객체들이다.
숫자에 대한 포매팅을 처리할 때 주로 사용된다.
[컨트롤러 메서드]
@GetMapping("ch0810/home0101")
public String home0101(Model model) {
int coin = 1000;
model.addAttribute("coin", coin);
return "ch0810/home0101";
}
[뷰 파일]
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<table border="1">
<tr>
<td>${coin}</td>
<td th:text="${coin}"></td>
</tr>
<tr>
<td>${#numbers.formatInteger(coin,3,'COMMA')}</td>
<td th:text="${#numbers.formatInteger(coin,3,'COMMA')}"></td>
</tr>
<tr>
<td>${#numbers.formatCurrency(coin)}</td>
<td th:text="${#numbers.formatCurrency(coin)}"></td>
</tr>
<tr>
<td>
<div>priceValue=99.87654</div>
<div>${#numbers.formatInteger(priceValue,3,'COMMA')}</div>
<div>${#numbers.formatDecimal(priceValue,5,10,'POINT')}</div>
</td>
<td>
<div th:with="priceValue=99.87654">
<p th:text="${#numbers.formatInteger(priceValue,3,'COMMA')}"></p>
<p th:text="${#numbers.formatDecimal(priceValue,5,10,'POINT')}"></p>
</div>
</td>
</tr>
</table>
</body>
</html>
[응답 화면]
컬렉션 없이 단순 반복 처리를 하고 싶다면 Numbers Class(org.thymeleaf.expression.Numbers)
의 Utility method인 #numbers.sequence을 사용하여 먼저 원하는 반복 횟수 만큼의
배열을 생성한 뒤 th:each 의 컬렉션에 넣어 주시면 됩니다.
/* Create a sequence (array) of integer numbers going from x to y */
${#numbers.sequence(from,to)}
${#numbers.sequence(from,to,step)}
<!-- html (Thymeleaf) -->
<th:block th:each="num : ${#numbers.sequence(1,5)}">
<div th:text="${num}"></div>
</th:block>
자바의 java.util.Date와 java.util.Calendar의 기능을 이용한다.
[컨트롤러 메서드]
@GetMapping("ch0810/home0201")
public String home0201(Model model) {
Date date = new Date();
model.addAttribute("now", date);
return "ch0810/home0201";
}
[뷰 파일]
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<table border="1">
<tr>
<td>${now}</td>
<td th:text="${now}"></td>
</tr>
<tr>
<td>${#dates.format(now, 'yyyy-MM-dd')}</td>
<td th:text="${#dates.format(now, 'yyyy-MM-dd')}"></td>
</tr>
<tr>
<td>${#dates.format(now, 'yyyy-MM-dd HH:mm:ss')}</td>
<td th:text="${#dates.format(now, 'yyyy-MM-dd HH:mm:ss')}"></td>
</tr>
<tr>
<td>${#dates.format(now, 'a h:mm')}</td>
<td th:text="${#dates.format(now, 'a h:mm')}"></td>
</tr>
<tr>
<td>${#dates.format(now, 'z a h:mm')}</td>
<td th:text="${#dates.format(now, 'z a h:mm')}"></td>
</tr>
<tr>
<td>timeValue=${#dates.createToday()}</td>
<td>
<div th:with="timeValue=${#dates.createToday()}">
<p>[[${timeValue}]]</p>
</div>
</td>
</tr>
</table>
</body>
</html>
[응답 화면]
문자열을 처리하기 위한 기능을 지원한다.
[컨트롤러 메서드]
@GetMapping("ch0810/home0301")
public String home0301(Model model) {
String str = "Hello, World!";
model.addAttribute("str", str);
return "ch0810/home0301";
}
[뷰 파일]
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<table border="1">
<tr>
<td>${str}</td>
<td th:text="${str}"></td>
</tr>
<tr>
<td>${#strings.contains(str, 'Hello')}</td>
<td th:text="${#strings.contains(str, 'Hello')}"></td>
</tr>
<tr>
<td>${#strings.containsIgnoreCase(str, 'Hello')}</td>
<td th:text="${#strings.containsIgnoreCase(str, 'Hello')}"></td>
</tr>
<tr>
<td>${#strings.startsWith(str, 'Hello')}</td>
<td th:text="${#strings.startsWith(str, 'Hello')}"></td>
</tr>
<tr>
<td>${#strings.endsWith(str, 'World!')}</td>
<td th:text="${#strings.endsWith(str, 'World!')}"></td>
</tr>
<tr>
<td>${#strings.indexOf(str, 'World!')}</td>
<td th:text="${#strings.indexOf(str, 'World!')}"></td>
</tr>
<tr>
<td>${#strings.length(str)}</td>
<td th:text="${#strings.length(str)}"></td>
</tr>
<tr>
<td>${#strings.escapeXml(str)}</td>
<td th:text="${#strings.escapeXml(str)}"></td>
</tr>
<tr>
<td>${#strings.replace(str, 'Hello', 'Hi')}</td>
<td th:text="${#strings.replace(str, 'Hello', 'Hi')}"></td>
</tr>
<tr>
<td>${#strings.toLowerCase(str)}</td>
<td th:text="${#strings.toLowerCase(str)}"></td>
</tr>
<tr>
<td>${#strings.toUpperCase(str)}</td>
<td th:text="${#strings.toUpperCase(str)}"></td>
</tr>
<tr>
<td>${#strings.trim(str)}</td>
<td th:text="${#strings.trim(str)}"></td>
</tr>
<tr>
<td>${#strings.substring(str, 7, 12)}</td>
<td th:text="${#strings.substring(str, 7, 12)}"></td>
</tr>
<tr>
<td>${#strings.substringAfter(str, 'World')}</td>
<td th:text="${#strings.substringAfter(str, 'World')}"></td>
</tr>
<tr>
<td>${#strings.substringBefore(str, 'World')}</td>
<td th:text="${#strings.substringBefore(str, 'World')}"></td>
</tr>
<tr>
<td>tokenStr:${#strings.listSplit(str,' ')}</td>
<td>
<ul>
<li th:each="tokenStr:${#strings.listSplit(str,' ')}">[[${tokenStr}]]</li>
</ul>
</td>
</tr>
<tr>
<td>tokenStr:${#strings.listSplit(str,' ')}</td>
<td>
<ul>
<li th:each="tokenStr:${#strings.listSplit(str,' ')}">[[${tokenStr}]]</li>
</ul>
</td>
</tr>
<tr>
<td>
<div>strArray=${#strings.listSplit(str,' ')}</div>
<div>${#strings.arrayJoin(strArray, '-')}</div>
</td>
<td>
<div th:with="strArray=${#strings.listSplit(str,' ')}">
<p th:text="${#strings.arrayJoin(strArray, '-')}">join : ${#strings.join(strArray, "-")} </p>
</div>
</td>
</tr>
</table>
</body>
</html>
[응답 화면]
자바 8 java.time 클래스 기능을 이용한다.
[컨트롤러 메서드]
@GetMapping("ch0810/home0201")
public String home0201(Model model) {
Date date = new Date();
model.addAttribute("now", date);
return "ch0810/home0201";
}
[뷰 파일]
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<table border="1">
<tr>
<td>${now}</td>
<td th:text="${now}"></td>
</tr>
<tr>
<td>${#temporals.format(now, 'yyyy-MM-dd')}</td>
<td th:text="${#temporals.format(now, 'yyyy-MM-dd')}"></td>
</tr>
<tr>
<td>${#temporals.format(now, 'yyyy-MM-dd HH:mm:ss')}</td>
<td th:text="${#temporals.format(now, 'yyyy-MM-dd HH:mm:ss')}"></td>
</tr>
<tr>
<td>${#temporals.format(now, 'a h:mm')}</td>
<td th:text="${#temporals.format(now, 'a h:mm')}"></td>
</tr>
<tr>
<td>${#temporals.format(now, 'z a h:mm')}</td>
<td th:text="${#temporals.format(now, 'z a h:mm')}"></td>
</tr>
<tr>
<td>timeValue=${#temporals.createToday()}</td>
<td>
<div th:with="timeValue=${#temporals.createToday()}">
<p>[[${timeValue}]]</p>
</div>
</td>
</tr>
</table>
</body>
</html>
[응답 화면]