1. 소개

Thymeleaf 는 HTML, XML, JavaScript, CSS 및 일반 텍스트를 처리하고 생성하기위한 Java 템플릿 엔진입니다. Thymeleaf 및 Spring에 대한 소개는 이 글을 참조하십시오 .

이러한 기본 기능 외에도 Thymeleaf는 애플리케이션에서 일반적인 작업을 수행하는 데 도움이되는 일련의 유틸리티 개체를 제공합니다.

이 기사에서는 Thymeleaf 3.0의 핵심 기능 – Spring MVC 애플리케이션의 Expression Utility Objects에 대해 설명합니다. 더 구체적으로, 날짜, 달력, 문자열, 개체 등을 처리하는 주제를 다룰 것입니다.

2. Maven 의존성

먼저 Thymeleaf를 Spring과 통합하는 데 필요한 구성을 살펴 보겠습니다. thymeleaf 스프링 라이브러리는 우리의 의존성이 필요합니다 :

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>

스프링 4 프로젝트는, 그 주 thymeleaf - spring4의  라이브러리는 대신 사용해야합니다 thymeleaf-spring5 . 최신 버전의 의존성은 여기 에서 찾을 수 있습니다 .

3. 식 유틸리티 개체

이 글의 핵심 내용을 살펴보기 전에 한 걸음 뒤로 물러나 웹 앱 프로젝트에서 Thymeleaf 3.0을 구성하는 방법을 보려면이 예제을 살펴보십시오 .

현재 기사의 목적을 위해 우리가 논의 할 모든 기능을 테스트하기 위해 Spring 컨트롤러와 HTML 파일을 만들었습니다. 다음은 사용 가능한 도우미 개체 및 해당 기능의 전체 List입니다.

  • #dates : java.util.Date 객체에대한 유틸리티 메서드
  • #calendars : java.util.Calendar 객체에사용되는 #dates 와 유사합니다.
  • #numbers : 숫자 오브젝트 형식화를위한 유틸리티 메소드
  • #strings : String 객체를위한 유틸리티 메소드
  • #objects :일반적인Java Object 클래스용 유틸리티 메소드
  • #bools : 부울 평가를위한 유틸리티 메서드
  • #arrays : 배열을위한 유틸리티 메소드
  • #lists : List에 대한 유틸리티 메서드
  • #sets : 세트를위한 유틸리티 메소드
  • #maps :Map를위한 유틸리티 메소드
  • #aggregates : 배열 또는 컬렉션에서 집계를 생성하기위한 유틸리티 메서드
  • #messages : 변수 표현식 내에서 외부화 된 메시지를 얻기위한 유틸리티 메소드

3.1. 날짜 개체

우리가 논의하고자하는 첫 번째 함수는 java.util.Date 객체의 처리입니다 . 날짜 처리를 담당하는 표현식 유틸리티 객체 # dates.functionName ()으로 시작 합니다. 우리가 다루고 자하는 첫 번째 함수는 (Spring 모델 매개 변수에 추가 된) Date 객체의 포맷팅입니다 .

ISO8601 형식 을 사용한다고 가정 해 보겠습니다 .

<p th:text="${#dates.formatISO(date)}"></p>

우리의 날짜 가 백엔드에 어떻게 설정되어 있든 상관없이이 표준에 따라 표시되어야합니다. 또한 형식을 구체적으로 지정하려면 수동으로 지정할 수 있습니다.

<p th:text="${#dates.format(date, 'dd-MM-yyyy HH:mm')}"></p>

이 함수는 날짜 와 형식 이라는 두 가지 변수를 매개 변수로 사용 합니다.

마지막으로, 우리가 사용할 수있는 몇 가지 유사하게 유용한 함수가 있습니다.

<p th:text="${#dates.dayOfWeekName(date)}"></p>
<p th:text="${#dates.createNow()}"></p>
<p th:text="${#dates.createToday()}"></p>

첫 번째에서는 요일의 이름을 받고 두 번째에서는 새 Date 객체를 만들고 마지막 으로 시간이 00:00으로 설정된 Date만듭니다 .

3.2. 달력 개체

달력 유틸리티는 java.util.Calendar 객체 의 인스턴스를 사용한다는 점을 제외하면 날짜 처리와 매우 유사 합니다.

<p th:text="${#calendars.formatISO(calendar)}"></p>
<p th:text="${#calendars.format(calendar, 'dd-MM-yyyy HH:mm')}"></p>
<p th:text="${#calendars.dayOfWeekName(calendar)}"></p>

유일한 차이점은 새 Calendar 인스턴스 를 만들 때입니다 .

<p th:text="${#calendars.createNow().getTime()}"></p>
<p th:text="${#calendars.createToday().getFirstDayOfWeek()}"></p>

요청 된 데이터를 얻기 위해 Calendar 클래스 메서드를 사용할 수 있습니다 .

3.3. 번호 처리

또 다른 매우 유용한 기능은 숫자 처리입니다. double 유형으로 무작위로 생성 num 변수 에 집중 해 보겠습니다 .

<p th:text="${#numbers.formatDecimal(num,2,3)}"></p>
<p th:text="${#numbers.formatDecimal(num,2,3,'COMMA')}"></p>

첫 번째 줄에서는 최소 정수 자릿수와 정확한 십진수를 설정하여 십진수 형식을 지정합니다. 두 번째 항목에서는 정수 및 소수 자릿수 외에도 소수 구분 기호를 지정했습니다. 옵션은 POINT , COMMA , WHITESPACE , NONE 또는 DEFAULT (로케일 별)입니다.

이 단락에서 제시하고자하는 기능이 하나 더 있습니다. 일련의 정수를 생성합니다.

<p th:each="number: ${#numbers.sequence(0,2)}">
    <span th:text="${number}"></span>
</p>
<p th:each="number: ${#numbers.sequence(0,4,2)}">
    <span th:text="${number}"></span>
</p>

첫 번째 예제에서는 Thymeleaf가 0-2에서 시퀀스를 생성하도록했고, 두 번째 예제에서는 최소값과 최대 값 외에 단계 정의를 제공했습니다 (이 예제에서는 값이 2 씩 변경됨).

간격은 양쪽에서 닫힙니다.

3.4. 문자열 작업

표현 유틸리티 개체의 가장 포괄적 인 기능입니다.

비어 있거나 null String 객체 를 검사하는 유틸리티로 설명을 시작할 수 있습니다 . 개발자들은이를 위해 Thymeleaf 태그 내에서 Java 메서드를 사용하는 경우가 많으며 이는 null 개체에 안전하지 않을 수 있습니다 .

대신 다음과 같이 할 수 있습니다.

<p th:text="${#strings.isEmpty(string)}"></p>
<p th:text="${#strings.isEmpty(nullString)}"></p>
<p th:text="${#strings.defaultString(emptyString,'Empty String')}"></p>

첫 번째 문자열 은 비어 있지 않으므로 메서드는 false 를 반환 합니다. 두 번째 Stringnull 이므로 true가 됩니다. 마지막으로 String 이 비어있는 경우 # strings.defaultString (…) 메서드를 사용하여 기본값을 지정할 수 있습니다.

더 많은 방법이 있습니다. 이들 모두는 문자열뿐만 아니라 Java.Collections 에서도 작동합니다 . 예를 들어 하위 문자열 관련 작업을 사용하려면 :

<p th:text="${#strings.indexOf(name,frag)}"></p>
<p th:text="${#strings.substring(name,3,5)}"></p>
<p th:text="${#strings.substringAfter(name,prefix)}"></p>
<p th:text="${#strings.substringBefore(name,suffix)}"></p>
<p th:text="${#strings.replace(name,'las','ler')}"></p>

또는 null-safe 비교 및 ​​연결을 사용하려면 :

<p th:text="${#strings.equals(first, second)}"></p>
<p th:text="${#strings.equalsIgnoreCase(first, second)}"></p>
<p th:text="${#strings.concat(values...)}"></p>
<p th:text="${#strings.concatReplaceNulls(nullValue, values...)}"></p>

마지막으로 구문을 항상 동일하게 유지하는 텍스트 스타일 관련 기능이 있습니다.

<p th:text="${#strings.abbreviate(string,5)} "></p>
<p th:text="${#strings.capitalizeWords(string)}"></p>

첫 번째 방법에서 축약 된 텍스트는 최대 크기를 n으로 만듭니다. 텍스트가 더 크면 잘리고 "…"로 끝납니다.

두 번째 방법에서는 단어를 대문자로 표시합니다.

3.5. 골재

여기서 논의하고 싶은 마지막 기능은 집계 입니다. 그들은이다 안전하고, 배열 또는 다른 컬렉션 평균 또는 합계를 계산하기위한 유틸리티를 제공합니다 :

<p th:text="${#aggregates.sum(array)}"></p>
<p th:text="${#aggregates.avg(array)}"></p>
<p th:text="${#aggregates.sum(set)}"></p>
<p th:text="${#aggregates.avg(set)}"></p>

4. 결론

이 기사에서는 Thymeleaf 프레임 워크 버전 3.0에서 구현 된 Expression Utility Objects 기능에 대해 설명했습니다.

이 예제의 전체 구현은 GitHub 프로젝트 에서 찾을 수 있습니다 .

테스트하는 방법? 우리의 제안은 먼저 브라우저로 플레이 한 다음 기존 JUnit 테스트도 확인하는 것입니다.

예제가 사용 가능한 모든 유틸리티 표현식을 포함하지는 않는다는 점에 유의하십시오. 모든 유형의 유틸리티에 대해 알아 보려면 여기를 참조하십시오 .