타임리프의 동작은 기존 HTML 테그의 속성에 기능을 정의하여 이루어진다. th:text 를 사용하여 HTML 콘텐츠에 데이터를 출력한다.

<span th:text="${data}">

Controller

					●	●	●
@Controller
@RequestMapping("/basic")
public class BasicController {
	@GetMapping("/text-basic")
	public String textBasic(Model model) {
		model.addAttribute("data", "Test Thymeleaf");
		return "basic/text-basic";
	}
}

.HTML

<html xmlns:th="http://www.thymeleaf.org">
<body>
	<ul>
		<li>th:text 사용 <span th:text="${data}"></span></li>
		<li>컨텐츠 안에서 직접 출력하기 = [[${data}]]</li>
	</ul>
</body>
</html>

결과

					●	●	●
<body>
	<ul>
		<li>th:text 사용 <span>Test Thymeleaf</span></li>
		<li>컨텐츠 안에서 직접 출력하기 = Test Thymeleaf</li>
	</ul>
</body>
th:field
추후 소개할 th:field는 TypeConverter가 적용된다. 상황에 맞게 사용하면 좋다.
이 외에도 th:text="${...}"   VS  th:text="${{...}}" 등의 특징들을 이후 타입 컨버터 파트에서 소개하겠다.

 

Escape

 

HTML 문서는 <, > 같은 특수 문자를 기반으로 정의된다. 그렇기에 이러한 특수 문자를 주의하여 뷰 템플릿을 사용한 HTML 화면을 생성해야한다.

기존 Controllerd의 model에 "data"를 "Test Thymeleaf"에서 "Test <b>Thymeleaf</b>로 수정하여 컴파일한다.

 

결과

웹 브라우저: Test <b>Thymeleaf</b>
					●	●	●
<body>
	<ul>
		<li>th:text 사용 <span>Test &lt;b&gt;Thymeleaf&lt;/b&gt;</span></li>
		<li>컨텐츠 안에서 직접 출력하기 = Test &lt;b&gt;Thymeleaf&lt;/b&gt;</li>
	</ul>
</body>

data의 "Thymeleaf"를 HTML 테그를 통해 강조를 희망했지만, 의도와 다르게 <b>테그가 그대로 출력된다.

또한 해당 HTML의 소스에는 < 등의 문자들이 &lt; 로 변경되었다.

 

 

 

HTML 엔티티
웹 브라우저는 < 를 HTML 테그의 시작으로 인식하기에, 이를 문자로 표현하기위한 방법이 HTML 엔티티이다. 여기서 HTML에서 사용하는 특수 문자를 HTML 엔티티로 변경하는 것을 Escape라고한다. 
여기서 타임리프의 th:text, [[...]] 는 Escape 를 기본적으로 제공한다. 아래와 같이 각각의 HTML 엔티티가 있다.
<  →  &lt;
>  →  &gt;

 

Unescape

 

기존의 강조 의도를 수행하기위해 타임리프의 th:utext ,  [(...)] 기능을 사용한다.

 

.HTML

<html xmlns:th="http://www.thymeleaf.org">
<body>
	<ul>
		<li><span th:text="${data}"></span></li>
		<li><span th:utext="${data}"></span></li>
	</ul>
	<ul>
		<li>[[${data}]]</li>
		<li>[(${data})]</li>
	</ul>
</body>
</html>

 

웹 브라우저 
// text vs utext
Test <b> Thymeleaf<b>
Test Thmeleaf (강조)
// [[...]] vs [(...)]
Test <b> Thymeleaf<b>
Test Thmeleaf (강조)
					●	●	●
<body>
	<ul>
		<li<span>Test &lt;b&gt;Thymeleaf&lt;/b&gt;</span></li>
		<li><span>Test <b>Thymeleaf</b></span></li>
	</ul>
</body>

다음과 같이 기존의 의도가 잘 반영된 것을 확인할 수 있다.

 

주의!
실제 서비스를 개발 과정에서 escape를 사용하지 않아서 HTML이 정상 렌더링 되지 않는 수 많은 문제가 발생한다. escape를 기본으로 하고, 꼭 필요한 때만 unescape를 사용해아한다.

 

 

 

 

 

 

 

 

'Thymeleaf' 카테고리의 다른 글

[Thymeleaf] 리터럴 Literal  (0) 2022.12.25
[Thymeleaf] 유틸리티 객체 및 날짜  (0) 2022.12.24
[Thymeleaf] 기본 객체 및 편의 객체  (0) 2022.12.23
[Thymeleaf] 변수 - SpringEL  (0) 2022.12.17
[Thymeleaf] 타임리프 소개  (1) 2022.12.15

Thymeleaf 란?

Thymeleaf는 웹(서블릿 기반) 및 비 웹 환경 모두에서 작동할 수 있는 Java XML/ XHTML/ HTML5 템플릿 엔진이며, 서버 사이드 자바 템플릿 엔진의 한 종류이다.

참고 - 템플릿 엔진이란? 
템플릿 엔진은 결과 문서를 생성하기 위해 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 결합하도록 설계된 소프트웨어이다. 이 중 웹 템플릿 엔진은 특히 웹 문서가 출력되는 템플릿 엔진을 말한다. 즉, 웹 템플릿 엔진은 지정된 템플릿 양식과 데이터가 합쳐져서 HTML 문서를 출력하는 소프트웨어이다.

 

Thymeleaf의 특징

  • 서버 사이드 HTML 렌더링 (SSR)
    타임리프의 주요 용도는 Back-End 서버에서 HTML을 동적으로 렌더링하는 것에 있다.

  • 네츄럴 템플릿
    타임리프는 순수 HTML을 최대한 유지하는 특징을 가지고 있다.
    이와 같은 특징을 통해 타임리프로 작성된 파일을 웹 브라우저에서 직접 열어도 내용을 정상적으로 확인 가능하다.
    서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과 또한 확인해 볼 수 있다. 
    - 참고 : 이 외의 뷰 템플릿 중 예를 들어 JSP로 작성된 파일 자체를 웹 브라우저에서 직접 열게 되면, JSP 소스코드와 HTML 난해하게 섞여 정상적인 HTML 결과를 확인하기 어렵다.

  • 스프링 통합 지원
    타임리프는 스프링 웹 프레임워크와 자연스럽게 통합되어, 스프링의 다양한 기능을 편리하게 사용하 수 있는 환경을 지원한다.

 

Thymeleaf 사용

 

타임리프 사용 선언

<html xmlns:th"http://www.thymeleaf.org">

 

기본 표현식

  • 단순 표현
    ·   변수 표현식: ${...}
    ·   선택 변수 표현식: *{...}
    ·   메시지 표현식: #{...}
    ·   링크 URL 표현식: @{...}
    ·   조각 표현식: ~{...}

  • 리터럴
    ·   텍스트: 'one text', 'Another one!',…
    ·   숫자: 0, 34, 3.0, 12.3,…
    ·   불린: true, false
    ·   널: null
    ·   리터럴 토큰: one, sometext, main,…

  • 문자 연산
    ·   문자 합치기: +
    ·   리터럴 대체: |The name is ${name}|

  • 산술 연산
    ·   Binary operators: +, -, *, /, %
    ·   Minus sign (unary operator): -

  • 불린 연산
    ·   Binary operators: and, or
    ·   Boolean negation (unary operator): !, not

  • 비교와 동등
    ·   비교: >, <, >=, <= (gt, lt, ge, le)
    ·   동등 연산: ==, != (eq, ne)

  • 조건 연산
    ·   If-then: (if) ? (then)
    ·   If-then-else: (if) ? (then) : (else)
    ·   Default: (value) ?: (defaultvalue)

  • 특별 토큰
    ·   No-Operation: _

    - 참고 : https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#standard-expression-syntax

 

 

공식 사이트 : https://www.thymeleaf.org/

공식 메뉴얼 - 기본 기능: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html

공식 메뉴얼 - 스프링 통합: https://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html

 

 

Thymeleaf

Integrations galore Eclipse, IntelliJ IDEA, Spring, Play, even the up-and-coming Model-View-Controller API for Java EE 8. Write Thymeleaf in your favourite tools, using your favourite web-development framework. Check out our Ecosystem to see more integrati

www.thymeleaf.org

 

'Thymeleaf' 카테고리의 다른 글

[Thymeleaf] 리터럴 Literal  (0) 2022.12.25
[Thymeleaf] 유틸리티 객체 및 날짜  (0) 2022.12.24
[Thymeleaf] 기본 객체 및 편의 객체  (0) 2022.12.23
[Thymeleaf] 변수 - SpringEL  (0) 2022.12.17
[Thymeleaf] 텍스트 - TEXT, UTEX  (1) 2022.12.15

+ Recent posts