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

  • 유틸리티 객체 예시

https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#appendix-b-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>
반응형