-
[Spring Boot] Spring Boot에서 Thymeleaf 사용하기Backend/Spring 2022. 8. 12. 17:23728x90
Thymeleaf란?
타임리프란 템플릿 엔진으로 흔히 뷰 템플릿이라고 부른다. Spring MVC 설계 시에 Controller가 전달하는 모델의 데이터를 이용하여 동적으로 화면을 구성할 수 있도록 View를 만들 수 있게 해준다.
타임리프는 html 태그를 기반으로 하고 여기에 th:속성을 이용하여 동적인 View를 제공한다.
Dependency 추가
Maven의 경우 pom.xml에 다음을 추가하여 사용할 수 있다.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
ViewResolver 등록
ApplcationContext에서 WebMvcConfigurer 인터페이스에 구현된 configureViewResolvers함수로 resolver를 등록한다.
@Override public void configureViewResolvers(ViewResolverRegistry registry) { // jsp 등록 registry.jsp().viewNames(new String[]{"jsp/*"}); // jsp와 thymeleaf를 사용하기 위한 설정 과정 var springResourceTemplateResolver = new SpringResourceTemplateResolver(); springResourceTemplateResolver.setApplicationContext(applicationContext); springResourceTemplateResolver.setPrefix("/WEB-INF/"); // view template이 있는 경로 springResourceTemplateResolver.setSuffix(".html"); // view 확장자 var springTemplateEngine = new SpringTemplateEngine(); springTemplateEngine.setTemplateResolver(springResourceTemplateResolver); // thymeleafViewResolver 등록 var thymeleafViewResolver = new ThymeleafViewResolver(); thymeleafViewResolver.setTemplateEngine(springTemplateEngine); thymeleafViewResolver.setOrder(1); // resolver는 chain으로 되어있기때문에 order 지정 thymeleafViewResolver.setViewNames(new String[]{"views/*"}); //jsp와 구분할 이름 지정 registry.viewResolver(thymeleafViewResolver); }
Thymeleaf 표현식
1. 변수식 : ${OGNL}
- OGNL(Object-Graph Navigation Language) : 객체의 속성에 값을 가져와서 설정하는 표현식
// customers.html <tr th:each="customer: ${customers}"> <td th:text="${customer.customerId}"></td> <td th:text="${customer.name}"></td> <td th:text="${customer.email}"></td> </tr>
여기서 customers는 controller에서 반환한 모델의 key값으로 고객들의 리스트를 담고있다. each를 사용해 고객리스트에서 고객을 customer 변수에 담아서 사용한다.
// Customer Controller 클래스 @RequestMapping(value = "/customers", method = RequestMethod.GET) public String findCustomers(Model model) { var allCustomers = customerService.getAllCustomers(); model.addAttribute("customers", allCustomers); return "views/customers"; }
아래의 Customer 클래스에서 정의한 속성 값을따라 가져온 customer 객체에 대해 속성 값으로 접근할 수 있다.
// Customer 클래스 class Customer { private UUID customerId; private String name; private String email; }
2. 메시지식 : #{코드}
스프링의 메시지 소스와 연동하여 메시지 코드를 넣으면 해당 메시지가 출력된다. 다국어 처리에 용이하다.
3. 링크식 : @{링크}
html의 a태그와 함께 사용하여 th:href 속성으로 해당 표현식을 사용한다.
<a th:href="@{http://localhost:8080/examples/customers}">view</a>
다음처럼 /로 시작하는 링크 패스의 경우 자동으로 애플리케이션 컨텍스트 네임이 앞에 붙게된다.
<a th:href="@{/customers}">view</a>
링크 패스에 변수식이나 선택 변수 식이 포함되어야 할 경우 다음과 같이 사용한다.
<a th:href="@{/customers/{customerId}(customerId=*{customerId})}">Details</a>
4. 선택 변수식: *{OGNL}
th:object를 사용하여 객체를 선택했을 경우 이 표현식으로 필드에 접근한다.
<tr th:each="customer: ${customers}" th:object="${customer}"> <td th:text="*{customerId}"></td> <td th:text="*{name}"></td> <td th:text="*{email}"></td> </tr>
728x90'Backend > Spring' 카테고리의 다른 글