# 템플릿 엔진
- 템플릿 엔진
    - 자바 웹 게발 시 JSP로 페이지 만듦 이때, 스크립트릿(<%%>) 태그 안에 로직 작성
        - 하지만 이는 추후 수정 어려움
    - 이를 해결 하기 위해서 템플릿 엔진 개발
    - 서식과 데이터를 결합한 결과물을 만들어주는 도구
        - 서식 - html과 같은 마크업에 해당
- 타임리프
    - HTML5와 호환 가능한 템플릿 엔진

## 타임리프 설정
- 의존성 추가
    - build.gradle
        - `compile "org.springframework.boot:spring-boot-starter-thymeleaf"` 추가
- html 사용
    - `<html xmlns:th="http://www.thymeleaf.org">` 명시로 사용 가능

```java
@Controller
public class UIController {
    @Autowired
    InMemoryProductService inMemoryProductService;

    @RequestMapping(value = "/th")
    public String templatePage(Model model){
        model.addAttribute("message", "boot template");
        return "th";
    }
}

타임리프 속성

변수 표현식

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>thymeleaf</title>
</head>
<body>
<div th:object="${product}">
    <p>name: <span th:text="*{name}"></span></p>
    <p>color: <span th:text="*{color}"></span></p>
    <p>price: <span th:text="*{price}"></span></p>

    <div th:if="${product.price} > 3000" th:text="비싸다"/>
    <div th:if="${product.price} > 1500" th:text="적당하다"/>

    <div th:unless="${product.price} >3000" th:text="비싸다"/>
</div>
</body>
</html>

조건문과 반복문

<tr th:each="prod : ${products}">
    <td th:text="${prod.color}"></td>
    <td th:text="${prod.productName}"></td>
    <td th:text="${prod.price}"></td>
</tr>

의문: prod 객체 하나는 color, productName, price 변수들은 모두 private인데 어떻게 접근?

WebJars를 이용한 프론트 라이브러리 관리

WebJars 적용

Build 파일 의존성 추가

compile 'org.webjars:jquery:3.1.0'
compile 'org.webjars:bootstrap:3.3.1'

페이지에서 WebJars 라이브러리 사용

<!DOCTYPE html>
<html>
    <head>
        <title>webjar</title>
        <script type="text/javascript" src="/webjars/jquery/3.1.0/jquery.min.js"></script>
        <link rel="stylesheet" href="/webjars/bootstrap/3.3.1/css/bootstrap.min.css"/>
        <script src="/webjars/bootstrap/3.3.1/js/bootstrap.min.js"></script>
        <style>
            div {
                background-color: #bca;
                width: 100px;
                border: 1px solid green;
            }
        </style>

    </head>
    <body>

    <div id="block">jquery222</div>

    <button type="button" class="btn btn-primary" onclick="btnHandler()">effect</button>

    <script type="text/javascript">
        function btnHandler(){
            $('#block').animate({
                width:"70%",
                opacity:0.4,
                marginLeft:"0.6in",
                fontSize:"3em",
                borderWidth:"10px"
            }, "15");
        }
    </script>

    </body>
</html>

버전 정보 축약



SpringSprng-bootTemplate EngineWebJars Share Tweet +1