Spring Boot | Thymeleaf 엔진 사용
Thymeleaf 이란?
- “타임 리프"라고 읽는다.
- 텍스트, HTML, XML, Javascript, CSS 그리고 텍스트를 생성할 수 있는 템플릿 엔진이다.
- 순수 HTML로 템플릿을 작성할 수 있다.
- Spring Boot에서 사용이 권장되고 있다. (Spring Boot에서는 JSP를 추천하지 않는다.)
http://www.thymeleaf.org/documentation.html
Hello World
의존관계 추가
Thymeleaf을 사용할 수 있도록 의존관계을 추가한다.
build.gradle
dependencies {
compile 'org.springframework.boot:spring-boot-starter-web'
+ compile 'org.springframework.boot:spring-boot-starter-thymeleaf'
compile 'org.webjars:jquery-ui:1.11.4'
}
컨트롤러의 구현
- 템플릿을 반환하는 경우 클래스에 @RestController 대신에 @Controller 어노테이션을 부여한다.
- 메소드의 반환 값으로 표시하는 템플릿의 경로를 지정한다.
- 템플릿 파일은 클래스 경로에 templates 패키지 아래에 위치한다.
- 컨트롤러 메소드가 리턴 한 문자열이 templates 패키지에서 상대 경로가 된다 (확장자는 생략 가능).
src/main/java/sample/springboot/web/HelloController.java
package sample.springboot.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method=RequestMethod.GET)
public String hello() {
return "hello";
}
}
src/main/resources/templates/hello.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello Thymeleaf</title>
</head>
<body>
<h1>Hello Thymeleaf</h1>
</body>
</html>
실행 결과
브라우저로 http://localhost:8080/hello 에 접속한다.
화면에 값을 포함
모델 구현
src/main/java/sample/springboot/web/Hoge.java
package sample.springboot.web;
public class Hoge {
public int id;
public String value;
@Override
public String toString() {
return "Hoge [id=" + id + ", value=" + value + "]";
}
}
컨트롤러의 구현
src/main/java/sample/springboot/web/HelloController.java
package sample.springboot.web;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method=RequestMethod.GET)
public String hello(Model model) {
Hoge hoge = new Hoge();
hoge.id = 10;
hoge.value = "hoge";
model.addAttribute("myData", hoge);
return "hello";
}
}
- 컨트롤러 메소드에서 Model을 인수받을 수 있도록 한다.
- 이 Model의 addAttribute() 메소드를 사용하여 화면에 출력하고 싶은 정보를 설정한다.
화면 구현
src/main/resources/templates/hello.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Hello Thymeleaf</title>
</head>
<body>
<dl>
<dt>id</dt>
<dd th:text="${myData.id}"></dd>
<dt>value</dt>
<dd th:text="${myData.value}"></dd>
</dl>
</body>
</html>
- 화면 측에서 먼저 Thymeleaf에 대한 네임 스페이스를 정의 (xmlns : th)
- th : text 속성에 지정된 값을 텍스트로 출력한다.
- th : text의 값은 $ {…}와 같이 EL 표현식스러워 출력 값을 지정한다.
실행 결과
브라우저로 http://localhost:8080/hello 에 접속한다.
반복 출력
컨트롤러의 구현
src/main/java/sample/springboot/web/HelloController.java
package sample.springboot.web;
import java.util.Arrays;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method=RequestMethod.GET)
public String hello(Model model) {
List<Hoge> list = Arrays.asList(
new Hoge() {{
id = 10;
value = "hoge";
}},
new Hoge() {{
id = 20;
value = "fuga";
}},
new Hoge() {{
id = 30;
value = "piyo";
}});
model.addAttribute("hogeList", list);
return "hello";
}
}
화면 구현
src/main/resources/templates/hello.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Hello Thymeleaf</title>
</head>
<body>
<dl th:each="hoge : ${hogeList}">
<dt>id</dt>
<dd th:text="${hoge.id}"></dd>
<dt>value</dt>
<dd th:text="${hoge.value}"></dd>
</dl>
</body>
</html>
th:each
으로 지정된 컬렉션을 반복할 수 있다.
최종 수정 : 2017-12-17