10.유틸리티 객체

리얼브로·2023년 2월 24일
0

thymeleaf

목록 보기
10/10

유틸리티 객체는 기존처럼 메서드를 호출하는 방식으로 사용할 수 있는 객체들이다.

10-1.숫자관련 #numbers

  • 숫자에 대한 포매팅을 처리할 때 주로 사용된다.

  • [요청] http://localhost:8080/ch0810/home0101

  • [컨트롤러 메서드]

    @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>
    
  • [응답 화면]

    10-1-2 .#numbers.sequence

    • 컬렉션 없이 단순 반복 처리를 하고 싶다면 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>

10-2.날짜관련 #dates, #calendars

  • 자바의 java.util.Date와 java.util.Calendar의 기능을 이용한다.

  • [요청] http://localhost:8080/ch0810/home0201

  • [컨트롤러 메서드]

    @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>
    
  • [응답 화면]

10-3.문자관련 #strings

  • 문자열을 처리하기 위한 기능을 지원한다.

  • [요청] http://localhost:8080/ch0810/home0301

  • [컨트롤러 메서드]

    @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>
  • [응답 화면]

10-4.자바 8 java.time 관련 #temporals

  • 자바 8 java.time 클래스 기능을 이용한다.

  • [요청] http://localhost:8080/ch0810/home0401

  • [컨트롤러 메서드]

    @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>
  • [응답 화면]

0개의 댓글