이번에는 타임리프에서 기본 객체들을 불러와 렌더링 해보자.
기존의 SpringBoot3.0 미만에서는
- ${#request}
- ${#respons}
- ${#session}
등등 스프링의 기본객체들을 위와같은 문법으로 별도의 model.addAttribute로 불러온 후 모델에 담지 않아도, 객체들을 불러와 뷰로 렌더링할 수 있었다.
하지만 현재는 ${#locale} 만 사용 가능하며, 다른 기본객체들은 addAttribute로 모델에 담은 후 반환한 뒤 뷰로 렌더링 해주어야 한다.
BasicController
@GetMapping("/basic-objects")
public String basicObjects(Model model, HttpServletRequest request, HttpServletResponse response, HttpSession session){
model.addAttribute("request",request);
model.addAttribute("response", response);
model.addAttribute("servletContext", request.getServletContext());
session.setAttribute("sessionData", "Hello Session");
return "basic/basic-objects";
}
@Component("helloBean")
static class HelloBean{
public String hello(String data){
return "Hello" + data;
}
}
basic/basic-objects.html
<!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>
위의 코드를 한번 살펴보자.
request, response, session, servletContext, sesseion의 경우, 컨트롤러에서 모델에 값을 넣어준 뒤 뷰로 반환하고, 반환받은 뷰에서는 text로 렌더링 하여 객체의 이름을 보여준다.
하지만, 위의 addAttribute로 모델을 반환한 경우에는 객체가 그대로 제공되기 때문에 데이터를 조회하려면, request.getParameter("data")와 같이 불편하게 접근해야 한다.
이를 해결하기 위해서 타임리프는 편의 객체를 제공한다.
편의 객체
- HTTP 요청 파라미터 접근 : param
- 예시) ${param.paramData}
- HTTP 세션 접근 : session
- 예시) ${session.sessionData}
- 스프링 빈 접근 : @
- 예시) ${@helloBean.hello('Spring!')}
렌더링 결과
'Etc > Thymeleaf' 카테고리의 다른 글
Thymeleaf - URL 링크 사용하기 (0) | 2023.07.25 |
---|---|
Thymeleaf - 유틸리티 객체와 날짜 (0) | 2023.07.24 |
Thymeleaf - 변수(SpringEL) (0) | 2023.07.24 |
Thymeleaf - 텍스트(text, utext) (0) | 2023.07.24 |
타임리프(Thymeleaf)란? (0) | 2023.07.24 |