오봉이와 함께하는 개발 블로그
스프링 MVC 2 - 기본 객체, 유틸리티 객체와 날짜 본문
728x90
기본 객체들
타임리프는 기본 객체들을 제공한다.${#request}
${#response}
${#session}
${#servletContext}
${#locale}
그런데 #request
는 HttpServletRequest
객체가 그대로 제공되기 때문에 데이터를 조회하려면 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
자바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