1. 소개
Thymeleaf 는 Spring과 직접 작동하도록 설계된 Java 템플릿 엔진입니다. Thymeleaf 및 Spring에 대한 소개는 이 글을 참조하십시오 .
이러한 기본 기능 외에도 Thymeleaf는 애플리케이션에서 일반적인 작업을 수행하는 데 도움이되는 일련의 유틸리티 개체를 제공합니다.
이 기사에서는 Thymeleaf 3.0의 몇 가지 기능을 사용 하여 새롭고 오래된 Java Date 클래스 의 처리 및 형식화에 대해 설명합니다 .
2. Maven 의존성
먼저 Thymeleaf와 Spring을 pom.xml 에 통합하는 데 필요한 구성을 살펴 보겠습니다 .
<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>
thymeleaf 및 thymeleaf-spring5 의 최신 버전은 Maven Central에서 찾을 수 있습니다. 스프링 4 프로젝트는, 그 주 thymeleaf - spring4의 라이브러리는 대신 사용해야합니다 thymeleaf-spring5 .
또한 새로운 Java 8 Date 클래스 로 작업하기 위해 pom.xml에 다음 의존성을 추가합니다 .
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
<version>3.0.4.RELEASE</version>
</dependency>
thymeleaf 엑스트라는 완전히 자바 8 시간 API과의 호환성을 위해 생성 된 공식 Thymeleaf 팀에 의해 지원되는 옵션 모듈입니다. 표현식 평가 중에 유틸리티 객체 프로세서로 Context에 # temporals 객체를 추가합니다 . 이는 OGNL (Object-Graph Navigation Language) 및 SpringEL (SpringEL)에서 표현식을 평가하는 데 사용할 수 있음을 의미합니다.
3. 기존 및 신규 : java.util 및 java.time
시간 패키지는 자바 SE 플랫폼을위한 새로운 날짜, 시간 및 달력 API입니다. 이전 레거시 날짜 와 새 API 의 주요 차이점 은 새 API가 타임 라인의 기계보기와 사람보기를 구분한다는 것입니다. 기계보기는 에포크와 관련된 일련의 정수 값을 표시하는 반면보기는 필드 집합 (예 : 연도 또는 일)을 표시합니다.
새 Time 패키지로 작업하려면 새 Java8TimeDialect 를 사용하도록 템플릿 엔진을 구성해야합니다 .
private ISpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.addDialect(new Java8TimeDialect());
engine.setTemplateResolver(templateResolver);
return engine;
}
이렇게하면 Standard Dialect에있는 것과 유사한 # temporals 개체 가 추가 되어 Thymeleaf 템플릿에서 Temporal 개체 의 서식을 지정하고 생성 할 수 있습니다.
새 클래스와 이전 클래스의 처리를 테스트하기 위해 다음 변수를 만들고 컨트롤러 클래스에 모델 개체로 추가합니다.
model.addAttribute("standardDate", new Date());
model.addAttribute("localDateTime", LocalDateTime.now());
model.addAttribute("localDate", LocalDate.now());
model.addAttribute("timestamp", Instant.now());
이제 Thymeleaf에서 제공하는 Expression 및 Temporals 유틸리티 객체 를 사용할 준비가되었습니다 .
3.1. 날짜 형식
우리가 다루고 자하는 첫 번째 함수는 (Spring 모델 매개 변수에 추가 된) Date 객체 의 포맷팅입니다 . ISO8601 형식 을 사용하기로 결정했습니다 .
<h1>Format ISO</h1>
<p th:text="${#dates.formatISO(standardDate)}"></p>
<p th:text="${#temporals.formatISO(localDateTime)}"></p>
<p th:text="${#temporals.formatISO(localDate)}"></p>
<p th:text="${#temporals.formatISO(timestamp)}"></p>
우리의 날짜 가 백엔드 측에 어떻게 설정되어 있든 상관없이 선택한 표준에 따라 표시됩니다. standardDate는 #에 의해 처리 될 것입니다 날짜 유틸리티입니다. 새로운 LocalDateTime, LocalDate 및 Instant 클래스는 # temporals 유틸리티에 의해 처리됩니다 . 이것이 브라우저에서 볼 수있는 최종 결과입니다.
이것이 브라우저에서 볼 수있는 최종 결과입니다.
또한 수동으로 형식을 설정하려면 다음을 사용하여 설정할 수 있습니다.
<h1>Format manually</h1>
<p th:text="${#dates.format(standardDate, 'dd-MM-yyyy HH:mm')}"></p>
<p th:text="${#temporals.format(localDateTime, 'dd-MM-yyyy HH:mm')}"></p>
<p th:text="${#temporals.format(localDate, 'MM-yyyy')}"></p>
관찰 할 수 있듯이 # temporals.format (…)으로 Instant 클래스를 처리 할 수 없습니다 . 이 경우 UnsupportedTemporalTypeException 이 발생 합니다. 또한 LocalDate의 형식은 특정 날짜 필드 만 지정하고 시간 필드는 건너 뛰는 경우에만 가능합니다.
최종 결과 :
3.2. 특정 날짜 필드 얻기
java.util.Date 클래스 의 특정 필드를 얻으려면 다음 유틸리티 객체를 사용해야합니다.
${#dates.day(date)}
${#dates.month(date)}
${#dates.monthName(date)}
${#dates.monthNameShort(date)}
${#dates.year(date)}
${#dates.dayOfWeek(date)}
${#dates.dayOfWeekName(date)}
${#dates.dayOfWeekNameShort(date)}
${#dates.hour(date)}
${#dates.minute(date)}
${#dates.second(date)}
${#dates.millisecond(date)}
새로운 java.time 패키지의 경우 # temporals 유틸리티를 사용해야합니다 .
${#temporals.day(date)}
${#temporals.month(date)}
${#temporals.monthName(date)}
${#temporals.monthNameShort(date)}
${#temporals.year(date)}
${#temporals.dayOfWeek(date)}
${#temporals.dayOfWeekName(date)}
${#temporals.dayOfWeekNameShort(date)}
${#temporals.hour(date)}
${#temporals.minute(date)}
${#temporals.second(date)}
${#temporals.millisecond(date)}
몇 가지 예를 살펴 보겠습니다. 먼저, 오늘의 요일을 보여 드리겠습니다.
<h1>Show only which day of a week</h1>
<p th:text="${#dates.day(standardDate)}"></p>
<p th:text="${#temporals.day(localDateTime)}"></p>
<p th:text="${#temporals.day(localDate)}"></p>
다음으로 요일의 이름을 보여 드리겠습니다.
<h1>Show the name of the week day</h1>
<p th:text="${#dates.dayOfWeekName(standardDate)}"></p>
<p th:text="${#temporals.dayOfWeekName(localDateTime)}"></p>
<p th:text="${#temporals.dayOfWeekName(localDate)}"></p>
마지막으로 오늘의 초를 보여 드리겠습니다.
<h1>Show the second of the day</h1>
<p th:text="${#dates.second(standardDate)}"></p>
<p th:text="${#temporals.second(localDateTime)}"></p>
시간 부분으로 작업하려면 LocalDate 에서 오류가 발생 하므로 LocalDateTime 을 사용해야 합니다.
4. 결론
이 빠른 사용방법(예제)에서는 Thymeleaf 프레임 워크 버전 3.0에 구현 된 Java 날짜 처리 기능에 대해 설명했습니다 .
이 예제의 전체 구현은 GitHub 프로젝트 에서 찾을 수 있습니다. 이것은 가져오고 실행하기 쉬운 Maven 기반 프로젝트입니다.
테스트하는 방법? 우리의 제안은 먼저 브라우저에서 코드를 가지고 플레이 한 다음 기존 JUnit 테스트도 확인하는 것입니다.
우리의 예는 Thymeleaf에서 사용 가능한 모든 옵션을 다루지 않습니다. 모든 유형의 유틸리티에 대해 배우고 싶다면 Spring 및 Thymeleaf Expressions를 다루는 기사를 참조하십시오 .
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/dates-in-thymeleaf
'Java' 카테고리의 다른 글
Spring과 Thymeleaf 3 : 표현 (0) | 2021.04.07 |
---|---|
Spring MVC + Thymeleaf 3.0 : 새로운 기능 (0) | 2021.04.07 |
Thymeleaf에서 조각 작업 (0) | 2021.04.07 |
Thymeleaf의 조건문 (0) | 2021.04.06 |
Thymeleaf의 반복 (0) | 2021.04.06 |