오봉이와 함께하는 개발 블로그

스프링 MVC 2 - 기본 객체, 유틸리티 객체와 날짜 본문

BE/Thymeleaf

스프링 MVC 2 - 기본 객체, 유틸리티 객체와 날짜

오봉봉이 2022. 8. 16. 21:59
728x90

기본 객체들

타임리프는 기본 객체들을 제공한다.
${#request}
${#response}
${#session}
${#servletContext}
${#locale}

그런데 #requestHttpServletRequest객체가 그대로 제공되기 때문에 데이터를 조회하려면 request.getParameter("data")처럼 불편하게 접근해야 한다.

이를 해결하기 위해 편의 객체도 제공한다.

  • HTTP 요청 파라미터 접근(쿼리 파라미터 접근) : param
    • ${param.paramData}
  • HTTP 세션 접근 : session
    • ${session.sessionData}
  • 스프링 빈 접근 : @
    • ${@helloBean.hello('spring!')}

코드

@GetMapping("/basic-objects")
public String basicObjects(HttpSession session) {
    session.setAttribute("sessionData", "Hello Session");
    return "basic/basic-objects";
}

@Component("helloBean")
static class HelloBean {
    public String hello(String data) {
        return "Hello " + data;
  }
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>식 기본 객체 (Expression Basic Objects)</h1>
<ul>
    <li>request = <span th:text="${#request}"></span></li>
    <li>response = <span th:text="${#response}"></span></li>
    <li>session = <span th:text="${#session}"></span></li>
    <li>servletContext = <span th:text="${#servletContext}"></span></li>
    <li>locale = <span th:text="${#locale}"></span></li>
</ul>

<h1>편의 객체</h1>
<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>

</body>
</html>

결과

식 기본 객체 (Expression Basic Objects)
  request = org.apache.catalina.connector.RequestFacade@38169caf
  response = org.apache.catalina.connector.ResponseFacade@10ed9755
  session = org.apache.catalina.session.StandardSessionFacade@609c6b88
  servletContext = org.apache.catalina.core.ApplicationContextFacade@427858e2
  locale = ko_KR

편의 객체
  Request Parameter = HelloParam
  session = Hello Session
  spring bean = Hello Spring!

유틸리티 객체와 날짜

타임리프는 문자, 숫자, 날짜, URI등을 편리하게 다루는 다양한 유틸리티 객체들을 제공한다.

타임리프 유틸리티 객체들

  • #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

자바8 날짜

타임리프에서 자바 8 날짜 LocalDate, LocalDateTime, Instant를 사용하려면 추가 라이브러리가 필요하지만, 스프링 부트 타임리프를 사용하면 해당 라이브러리가 자동으로 추가되고 통합된다.
라이브러리 : thymeleaf-extras-java8time
자바8 날짜용 유틸리티 객체 : #temporals

예시

<span th:text="${#temporals.format(localDateTime, 'yyyy-MM-dd HH:mm:ss')}"></span>

코드 추가

@GetMapping("/date")
public String date(Model model) {
    model.addAttribute("localDateTime", LocalDateTime.now());
    return "basic/date";
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>LocalDateTime</h1>
<ul>
    <li>default = <span th:text="${localDateTime}"></span></li>
    <li>yyyy-MM-dd HH:mm:ss = <span th:text="${#temporals.format(localDateTime, 'yyyy-MM-dd HH:mm:ss')}"></span></li>
</ul>

<h1>LocalDateTime - Utils</h1>
<ul>
    <li>${#temporals.day(localDateTime)} = <span th:text="${#temporals.day(localDateTime)}"></span></li>
    <li>${#temporals.month(localDateTime)} = <span th:text="${#temporals.month(localDateTime)}"></span></li>
    <li>${#temporals.monthName(localDateTime)} = <span th:text="${#temporals.monthName(localDateTime)}"></span></li>
    <li>${#temporals.monthNameShort(localDateTime)} = <span th:text="${#temporals.monthNameShort(localDateTime)}"></span></li>
    <li>${#temporals.year(localDateTime)} = <span th:text="${#temporals.year(localDateTime)}"></span></li>
    <li>${#temporals.dayOfWeek(localDateTime)} = <span th:text="${#temporals.dayOfWeek(localDateTime)}"></span></li>
    <li>${#temporals.dayOfWeekName(localDateTime)} = <span th:text="${#temporals.dayOfWeekName(localDateTime)}"></span></li>
    <li>${#temporals.dayOfWeekNameShort(localDateTime)} = <span th:text="${#temporals.dayOfWeekNameShort(localDateTime)}"></span></li>
    <li>${#temporals.hour(localDateTime)} = <span th:text="${#temporals.hour(localDateTime)}"></span></li>
    <li>${#temporals.minute(localDateTime)} = <span th:text="${#temporals.minute(localDateTime)}"></span></li>
    <li>${#temporals.second(localDateTime)} = <span th:text="${#temporals.second(localDateTime)}"></span></li>
    <li>${#temporals.nanosecond(localDateTime)} = <span th:text="${#temporals.nanosecond(localDateTime)}"></span></li>
</ul>

</body>
</html>

결과

LocalDateTime
  default = 2022-08-16T21:57:38.786745
  yyyy-MM-dd HH:mm:ss = 2022-08-16 21:57:38
LocalDateTime - Utils
  ${#temporals.day(localDateTime)} = 16
  ${#temporals.month(localDateTime)} = 8
  ${#temporals.monthName(localDateTime)} = 8월
  ${#temporals.monthNameShort(localDateTime)} = 8월
  ${#temporals.year(localDateTime)} = 2022
  ${#temporals.dayOfWeek(localDateTime)} = 2
  ${#temporals.dayOfWeekName(localDateTime)} = 화요일
  ${#temporals.dayOfWeekNameShort(localDateTime)} = 화
  ${#temporals.hour(localDateTime)} = 21
  ${#temporals.minute(localDateTime)} = 57
  ${#temporals.second(localDateTime)} = 38
  ${#temporals.nanosecond(localDateTime)} = 786745000
출처 : 인프런 김영한 지식공유자님 강의 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
728x90

'BE > Thymeleaf' 카테고리의 다른 글

스프링 MVC 2 - literal(리터럴)  (0) 2022.08.16
스프링 MVC 2 - 타임리프 URL  (0) 2022.08.16
스프링 MVC 2 - 변수 SpringEL  (0) 2022.08.16
스프링 MVC 2 - 타임리프 text, utext  (0) 2022.08.16
스프링 MVC 2 - 타임리프 개요  (0) 2022.08.16
Comments