Thymeleaf
[Thymeleaf] 객체
걸어가는 신사
2022. 1. 25. 18:53
1. 기본 객체
- HttpServletRequest, HttpServletResponse 등의 객체를 Model에 담아서 View로 넘겨야 한다.
- 하지만 자주 쓰는 객체들을 타임리프에서는 기본 객체들로 제공한다.
//Controller
session.setAttribute("sessionData", "Hello Session");
@Component("helloBean")
static class HelloBean {
public String hello(String data) {
return "Hello " + data;
}
}
(1) 기본 객체
- Thymeleaf은 5가지의 기본 객체를 제공한다.
${#request}
${#response}
${#session}
${#servletContext}
${#locale}
<ul>
<li>request = <span th:text="${#request}"></span></li>
<li>response = <span th:text="${#response}"></span></li>
<li>session = <span th:text="${#session.getAttribute('sessionData')}"></span></li>
<li>servletContext = <span th:text="${#servletContext}"></span></li>
<li>locale = <span th:text="${#locale}"></span></li>
</ul>
- #session은 HttpSession 객체가 그대로 제공되기 때문에 데이터를 조회하려면 session.getAttribute('sessionData')처럼 불편하게 접근해야 한다.
- 이 점을 해결하기 위해 편의 객체도 제공한다.
(2) 편의 객체
${param.paramData}
${session.sessionData}
${@helloBean.hello('...')}
<ul>
<li>Request Parameter = <span th:text="${param.paramData}"></span></li>
<li>session = <span th:text="${session.sessionData}"></span></li>
<li>spring bean = <span th:text="${@helloBean.hello('Spring!')}"></span></li>
</ul>
2. 유틸리티 객체와 날짜
- 타임리프는 문자, 숫자, 날짜, URI등을 편리하게 다루는 다양한 유틸리티 객체들을 제공한다.
(1) 타임리프 유틸리티 객체
타임리프 유틸리티 객체들
#message : 메시지, 국제화 처리
#uris : URI 이스케이프 지원
#dates : java.util.Date 서식 지원
#calendars : java.util.Calendar 서식 지원
#temporals : 자바8 날짜 서식 지원
#numbers : 숫자 서식 지원
#strings : 문자 관련 편의 기능
#objects : 객체 관련 기능 제공
#bools : boolean 관련 기능 제공
#arrays : 배열 관련 기능 제공
#lists , #sets , #maps : 컬렉션 관련 기능 제공
#ids : 아이디 처리 관련 기능 제공
- 타임리프 유틸리티 객체
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#expression-utility-objects
- 유틸리티 객체 예시
(2) 자바8 날짜
- 타임리프에서 자바 8 날짜인 LocalDate, LocalDateTime, Instant를 사용하려면 추가 라이프러리가 필요하다.
타임리프 자바8 날짜 지원 라이브러리
thymeleaf-extras-java8time
//Gradle 의존성 추가
implementation 'org.thymeleaf.extras:thymeleaf-extras-java8time:2.1.0.RELEASE'
- 스프링 부트 타임리프를 사용하면 해당 라이브러리가 자동으로 추가되고 통합된다.
(3) Example
//Controller
model.addAttribute("localDateTime", LocalDateTime.now());
<h1>LocalDateTime</h1>
<ul>
<li>default = <span th:text="${localDateTime}"></span></li> <!--2022-01-24T19:50:03.315974900-->
<li>yyyy-MM-dd HH:mm:ss =
<span th:text="${#temporals.format(localDateTime, 'yyyy-MM-dd HH:mm:ss')}"></span>
</li> <!--2022-01-24 19:50:03-->
</ul>
<h1>LocalDateTime - Utils</h1>
<ul> // 현재시간 : 2022-01-24T19:50:03.315974900
<li><span th:text="${#temporals.day(localDateTime)}"></span></li> <!--24-->
<li><span th:text="${#temporals.month(localDateTime)}"></span></li> <!--1-->
<li><span th:text="${#temporals.monthName(localDateTime)}"></span></li> <!--1월-->
<li><span th:text="${#temporals.monthNameShort(localDateTime)}"></span></li> <!--1월-->
<li><span th:text="${#temporals.year(localDateTime)}"></span></li> <!--2022-->
<li><span th:text="${#temporals.dayOfWeek(localDateTime)}"></span></li> <!--1-->
<li><span th:text="${#temporals.dayOfWeekName(localDateTime)}"></span></li> <!--월요일-->
<li><span th:text="${#temporals.dayOfWeekNameShort(localDateTime)}"></span></li> <!--월-->
<li><span th:text="${#temporals.hour(localDateTime)}"></span></li> <!--19-->
<li><span th:text="${#temporals.minute(localDateTime)}"></span></li> <!--50-->
<li><span th:text="${#temporals.second(localDateTime)}"></span></li> <!--3-->
<li><span th:text="${#temporals.nanosecond(localDateTime)}"></span></li> <!--315974900-->
</ul>
반응형