๋ฐฑ์—”๋“œ/Spring-boot

[Spring Boot] Thymeleaf ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ์ •๋ฆฌ

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 7. 29. 20:47
728x90

0. Thymeleaf ๋ž€?

์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ „๋‹ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋™์ ์œผ๋กœ ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋ทฐ ํ…œํ”Œ๋ฆฟ ์—”์ง„

 

1. ์‚ฌ์šฉ

html ํŒŒ์ผ์— ์ฝ”๋“œ ์‚ฝ์ž… ํ›„ ์‚ฌ์šฉ

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

 

2. ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

1) ํ…์ŠคํŠธ ์ถœ๋ ฅ

์ปจํŠธ๋กค๋Ÿฌ์—์„œ model.setAttribute("๋ณ€์ˆ˜๋ช…", "๊ฐ’") ๋ถ€๋ถ„์˜ ๊ฐ’์„ ์ถœ๋ ฅ

  • ํƒœ๊ทธ ์•ˆ์—์„œ ์ถœ๋ ฅ < ํƒœ๊ทธ๋ช… th:"text=${๋ณ€์ˆ˜๋ช…}" >
  • ์ปจํ…์ธ ์—์„œ ์ง์ ‘ ์ถœ๋ ฅ [[${๋ณ€์ˆ˜}]]

 

cf) ์ต์Šค์ผ€์ดํ”„(escape)

ํŠน์ • ๋ฌธ์ž๋ฅผ HTML๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ–‰์œ„

๊ฐ’ ๋ถ€๋ถ„์˜ < > ๋“ฑ์˜ ํŠน์ˆ˜ ๋ฌธ์ž์—ด์„ <(&lt), >(&rt) ๋„์–ด์“ฐ๊ธฐ(&nbsp) ๊ธฐํ˜ธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ธ์‹ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ '์ด์Šค์ผ€์ดํ”„(escape)'๋ผ๊ณ  ํ•œ๋‹ค.

Q : ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ’์— <ํƒœ๊ทธ> ๋ฅผ ์ธ์‹ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

A : ์ต์Šค์ผ€์ดํ”„ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

  • ํƒœ๊ทธ ์•ˆ์—์„œ ์ถœ๋ ฅ <ํƒœ๊ทธ๋ช… th:utext "${๋ณ€์ˆ˜๋ช…}">
  • ์ฝ˜ํ…์ธ ์—์„œ ์ง์ ‘ ์ถœ๋ ฅ [(${๋ณ€์ˆ˜})]

Q : ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”?

A : ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ ๋™์ ์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, ์—ฌ๋Ÿฌ ํŠน์ˆ˜๋ฌธ์ž๋“ค ๋•Œ๋ฌธ์— html ํŽ˜์ด์ง€๊ฐ€ ๊นจ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

2) Spring EL

์Šคํ”„๋ง ํ‘œํ˜„ ์–ธ์–ด

  • ๊ฐ์ฒด์˜ ์†์„ฑ ๊ฐ’์— ์ ‘๊ทผ

${user.username}

${user['username']}

${user.getUsername()}

 

List์™€ HashMap๋„ ํ•ด๋‹น ๊ฐ์ฒด์— ์ ‘๊ทผํ•œ ๋’ค, ๊ฐ์ฒด์—์„œ ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • List<๊ฐ์ฒด> List[index]
  • Map<key, ๊ฐ์ฒด> Map[key]

 

3) ์ง€์—ญ๋ณ€์ˆ˜

์„ ์–ธ๋œ ํƒœ๊ทธ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 <ํƒœ๊ทธ๋ช… th.with="์ง€์—ญ๋ณ€์ˆ˜๋ช…"={$๋ณ€์ˆ˜๋ช…}">

 

4) ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด

- ๊ธฐ๋ณธ ๊ฐ์ฒด

  • ${#request}
  • ${#response}
  • ${#session}
  • ${#servletContext}
  • ${#locale}

- ํŽธ์˜๊ฐ์ฒด

  • "${param.paramData} http ์ฃผ์†Œ?paramData=๊ฐ’ ๋ถ€๋ถ„์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์„ธ์…˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ "${session.sessionData}"
  • ์Šคํ”„๋ง ๋นˆ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ "${@์Šคํ”„๋ง๋นˆ๋“ฑ๋ก์ด๋ฆ„.๋ฉ”์†Œ๋“œ๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜)}"

 

5) ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ฐ์ฒด

์ด๋Ÿฐ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค ์ •๋„๋งŒ ํ™•์ธํ•˜๊ณ  ์ž์„ธํ•œ ์‚ฌํ•ญ์€ ํ™ˆํŽ˜์ด์ง€ ๊ณต์‹ ๋งค๋‰ด์–ผ์„ ์ฐธ์กฐํ•˜์—ฌ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ž. 

  • ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ &{#message}
  • URI ์ด์Šค์ผ€์ดํ”„ ์ง€์› ${#uris}
  • java.util.Date ์„œ์‹ ์ง€์› ${#dates}
  • java.util.Calendar ์„œ์‹ ์ง€์› ${#calendars}
  • ์ž๋ฐ” 8 ๋‚ ์งœ ์„œ์‹ ์ง€์› ${#temporals}
  • ์ˆซ์ž ์„œ์‹ ์ง€์› &{#numbers}
  • ๋ฌธ์ž ๊ด€๋ จ ํŽธ์˜ ๊ธฐ๋Šฅ ${#strings}
  • ๊ฐ์ฒด ๊ด€๋ จ ๊ธฐ๋Šฅ ์ œ๊ณต ${#objects}
  • boolean ๊ด€๋ จ ๊ธฐ๋Šฅ ์ œ๊ณต ${#bools}
  • ๋ฐฐ์—ด ๊ด€๋ จ ๊ธฐ๋Šฅ ์ œ๊ณต ${#arrays}
  • ์ปฌ๋ ‰์…˜ ๊ด€๋ จ ๊ธฐ๋Šฅ ์ œ๊ณต &{#lists}, &{#sets}, &{#maps}
  • ์•„์ด๋”” ์ฒ˜๋ฆฌ ๊ด€๋ จ ๊ธฐ๋Šฅ ์ œ๊ณต, ๋’ค์—์„œ ์„ค๋ช… ${#ids}
  • ๋‚ ์งœ์šฉ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ฐ์ฒด ${#temporals}
 

Tutorial: Using Thymeleaf

1 Introducing Thymeleaf 1.1 What is Thymeleaf? Thymeleaf is a modern server-side Java template engine for both web and standalone environments, capable of processing HTML, XML, JavaScript, CSS and even plain text. The main goal of Thymeleaf is to provide a

www.thymeleaf.org

 

6) URL ๋งํฌ

<ํƒœ๊ทธ๋ช… th:href=" @{http์ฃผ์†Œ ~ }">

 

~ ๋ถ€๋ถ„์€ ๊ฒฝ๋กœ๋ณ€์ˆ˜, ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ, ๊ฒฝ์†Œ๋ณ€์ˆ˜+์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ตฌ์„ฑ

 

  • ๊ฒฝ๋กœ๋ณ€์ˆ˜ (http ์ฃผ์†Œ?param1=data1&param2=data2)

@{http ์ฃผ์†Œ(param1=${param1}, param2=${param2})}

 

  • ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ (http ์ฃผ์†Œ/data1/data2

@{http ์ฃผ์†Œ/{param1}/{param2}(param1=${param1}, param2=${param2})}

 

  • ๊ฒฝ๋กœ๋ณ€์ˆ˜+์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ (http ์ฃผ์†Œ/data1/data2?param3=data3)

@{http ์ฃผ์†Œ/{param1}/{param2}(param3=${param3})}

 

7) ๋ฆฌํ„ฐ๋Ÿด

์†Œ์Šค์ฝ”๋“œ์ƒ์˜ ๊ณ ์ •๋œ ๊ฐ’

  • ๋ฌธ์ž : ์›์น™) ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์•ผํ•จ(' ๋ฌธ์ž ') ์˜ˆ์™ธ) ์—ฐ์†์ ์œผ๋กœ ์ด์–ด์ง„ ๋ฌธ์ž๋ผ๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค
  • ์ˆซ์ž
  • Boolean : true, false
  • Null : null

 

8) ์—ฐ์‚ฐ

๋‹ค๋ฅธ ์—ฐ์‚ฐ๊ณผ ๋™์ผํ•œ๋ฐ ํŠน์ • ํŠน์ˆ˜๋ฌธ์ž๋งŒ ์ฃผ์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ž

  • > (gt)
  • < (lt)
  • >= (ge)
  • <= (le)
  • ! (not)
  • == (eq)
  • != (neq, ne)

 

9) ์กฐ๊ฑด๋ฌธ

์ฃผ๋กœ 8๋ฒˆ์˜ ์—ฐ์‚ฐ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ if์™€ unless์™€ switch ๋ฌธ์žฅ์ด ์žˆ๊ณ  ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ํƒœ๊ทธ์˜ ์ถœ๋ ฅ์ด ์ œํ•œ๋œ๋‹ค.

 

.html

<th:if="์กฐ๊ฑด">

<th:unless="์กฐ๊ฑด">

<th:switch="์กฐ๊ฑด๊ฐ’">

    <th:case="๊ฐ’ 1">

    <th:case="๊ฐ’ 2">

    <th:case="*"> //default(์กฐ๊ฑด์ด ์—†์„ ๋•Œ ์‚ฌ์šฉ)

 

10) ์†์„ฑ๊ฐ’ ์„ค์ •

์†์„ฑ ์ƒ์„ฑ/๋Œ€์ฒด <ํƒœ๊ทธ๋ช… th:์†์„ฑ๋ช…="๊ฐ’"> : ํ•ด๋‹น ์†์„ฑ๋ช…์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค์–ด ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , ์†์„ฑ๋ช…์ด ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.

 

์†์„ฑ ์ถ”๊ฐ€

  • ๋’ค์— ์ถ”๊ฐ€

.html

<ํƒœ๊ทธ๋ช… ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1="๊ฐ’1" th:attrappend="ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1=๊ฐ’2"> 

๊ฒฐ๊ณผ

ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1=๊ฐ’1๊ฐ’2

 

  • ์•ž์— ์ถ”๊ฐ€

.html

<ํƒœ๊ทธ๋ช… ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1="๊ฐ’1" th:attrprepend="ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1=๊ฐ’2"> 

๊ฒฐ๊ณผ

ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1=๊ฐ’2๊ฐ’1

 

  • ๊ทธ ์™ธ) classappend : ๋„์–ด์“ฐ๊ธฐ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ถ”๊ฐ€ํ•œ๋‹ค.

.html

<ํƒœ๊ทธ๋ช… ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1="๊ฐ’1"th:classappend="ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1=๊ฐ’2">

๊ฒฐ๊ณผ

ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1=๊ฐ’1 ๊ฐ’2

 

์‚ฌ์šฉ ์˜ˆ์ œ

htmlํŒŒ์ผ์—์„œ <input type="check box" name="active" checked="false">

์ด ๊ฒฝ์šฐ cheked๋ผ๋Š” ์†์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒดํฌ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค.

ํ•˜์ง€๋งŒ, ์†์„ฑ๊ฐ’ ๋Œ€์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ check๊ฐ€ ๋˜์—ˆ์„ ๋•Œ๋งŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.

<input type="check box" name="active" th:checked="true">

<input type="check box" name="active" th:checked="false">

 

11) ๋ฐ˜๋ณต๋ฌธ

Iterable, Enumeration ๊ฐ์ฒด์˜ ์›์†Œ๋“ค์„ ์ถœ๋ ฅํ•  ๋•Œ ์ถ”๋กœ ์‚ฌ์šฉ

 

.html

<th:each="ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1 : ${๊ฐ์ฒด๋ณ€์ˆ˜์ด๋ฆ„}">

<th:ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„2="{ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1.์†์„ฑ1}">

 

ํ˜„์žฌ ์†์„ฑ ํ™•์ธ userStat

  • ์ธ๋ฑ์Šค ํ™•์ธ(0๋ถ€ํ„ฐ) : userStat.index
  • ํ˜„์žฌ ๋ช‡ ๋ฒˆ์งธ ๋ฐ˜๋ณต์ธ์ง€ ํ™•์ธ(1๋ถ€ํ„ฐ) : userStat.count
  • ์ „์ฒด ๋ฐ˜๋ณต ํšŸ์ˆ˜(๊ฐ์ฒด์˜ ์‚ฌ์ด์ฆˆ) ํ™•์ธ : userStat.size
  • ๋ฐ˜๋ณต์˜ ํ™€์ˆ˜ ์ง์ˆ˜ ํ™•์ธ(boolean) : userStat.odd, userStat.even
  • ๋ฐ˜๋ณต์˜ ์ฒซ ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ํ™•์ธ(boolean) : userStat.first, userStat.last
  • ํ˜„์žฌ ๊ฐ์ฒด ํ™•์ธ : userStat.current

 

12) ์ฃผ์„

๋ชจ๋“  ์ฃผ์„์€ .html ํŒŒ์ผ๋กœ ๋ณด๋ฉด ์ฃผ์„์ฒ˜๋ฆฌ ๋œ ์ฑ„๋กœ ๋ณด์ธ๋‹ค.

 

ํ‘œ์ค€ html ์ฃผ์„

์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋žœ๋”๋ง ํ•˜์ง€ ์•Š๊ณ  + ํƒ€์ž„๋ฆฌํ”„๊ฐ€ ๋žœ๋”๋ง(์„œ๋ฒ„์‚ฌ์ด๋“œ ๋žœ๋”๋ง์‹œ ์ฃผ์„์ฝ”๋“œ๋ฅผ ์—†์• ์ง€ ์•Š๋Š”๋‹ค) ํ•˜์ง€๋„ ์•Š๋Š”๋‹ค

์ฃผ์„ ์ฝ”๋“œ๋Š” html์ƒ์— ๊ทธ๋Œ€๋กœ ์กด์žฌํ•˜๊ฒŒ ๋‘”๋‹ค.

<!-- ์ฝ”๋“œ --> 

 

ํƒ€์ž„๋ฆฌํ”„ ํŒŒ์„œ ์ฃผ์„

์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋žœ๋”๋ง ํ•˜์ง€ ์•Š๊ณ  + ํƒ€์ž„๋ฆฌํ”„๊ฐ€ ๋žœ๋”๋ง(์„œ๋ฒ„์‚ฌ์ด๋“œ ๋žœ๋”๋ง ์‹œ ์ฃผ์„ ์ฝ”๋“œ๋ฅผ ์—†์•ค๋‹ค) ํ•œ๋‹ค.

์ฃผ์„ ์ฝ”๋“œ๋Š” html ์ƒ์— ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.

<!-- /* ์ฝ”๋“œ */ -->

 

ํƒ€์ž„๋ฆฌํ”„ ํ”„๋กœํ† ํƒ€์ž… ์ฃผ์„

์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋žœ๋”๋ง ํ•˜์ง€ ์•Š๊ณ  +์„œ๋ฒ„์‚ฌ์ด๋“œ ๋žœ๋”๋ง ์‹œ ํƒ€์ž„๋ฆฌํ”„๋กœ ๋žœ๋”๋ง ๋œ ๊ฒฝ์šฐ์—๋งŒ ์ฃผ์„์„ ์ œ๊ฑฐํ•˜๊ณ  ํ™”๋ฉด์—์„œ ์ถœ๋ ฅํ•œ๋‹ค.

์ฃผ์„ ์ฝ”๋“œ๋Š” ์ฃผ์„์ด ์ œ๊ฑฐ๋˜์–ด ๊ฒฐ๊ณผ๊ฐ€ html ์ƒ์— ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

<!-- /*/

๋ธ”๋ก ์ฝ”๋“œ

/*/ -->

 

๋Œ€๋ถ€๋ถ„) 2๋ฒˆ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฃผ์„์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

13) ์ž์ฒดํƒœ๊ทธ ๋ธ”๋ก

ํƒ€์ž„๋ฆฌํ”„ ํŠน์„ฑ์ƒ html์˜ ์†์„ฑ์œผ๋กœ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ํƒœ๊ทธ๋กœ์จ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.

.html

<th:block th:each="ํƒœ๊ทธ์†์„ฑ์ด๋ฆ„1 : ${๊ฐ์ฒด๋ณ€์ˆ˜์ด๋ฆ„}">

    <ํƒœ๊ทธ๋ช… ~>

 

14) ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ํƒ€์ž„๋ฆฌํ”„

1. ํ…์ŠคํŠธ ๋žœ๋”๋ง

ํ…์ŠคํŠธ ๋žœ๋”๋ง์‹œ ๋”ฐ์˜ดํ‘œ๋ฅผ ๋ถ™์—ฌ์•ผ ํ•˜๊ฑฐ๋‚˜, ํŠน์ˆ˜๋ฌธ์ž ๋“ฑ์„ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

.js

user.username="user A"๋ผ๊ณ  ํ•  ๋•Œ

var name=[[${user.username}]] ์œผ๋กœ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ 

var name= "[[${user.username}]]"์œผ๋กœ ํƒ€์ž…์— ๋งž์ถ”์–ด ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

2. ๋‚ด์ถ”๋Ÿด ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ X

.js

var username= /*[[$user.username]] */ "test username"

์ฃผ์„์ด ์ œ๊ฑฐ๋˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ๋ฌธ์žฅ์„ ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.

๊ฒฐ๊ณผ

username= /*[[$user.username]] */ "test username"

3. ๊ฐ์ฒด ์‚ฌ์šฉ ์‹œ ๋ถˆํŽธํ•จ

.js

username=๊ฐ์ฒด ๋ฅผ ํ• ๋‹นํ–ˆ์„ ๋•Œ

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ• ๋‹น๋œ๋‹ค.

๊ฒฐ๊ณผ

username=Controller์ด๋ฆ„.๊ฐ์ฒดํด๋ž˜์Šค(๊ฐ์ฒด์†์„ฑ=๊ฐ์ฒด๊ฐ’);

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ธ๋ผ์ธ

์œ„์˜ ๋ฌธ์ œ๋“ค์€ ํƒ€์ž„๋ฆฌํ”„ ๊ธฐ๋Šฅ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ธ๋ผ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

<script th:inline="javascript">

1. ํ…์ŠคํŠธ ๋žœ๋”๋ง

ํƒ€์ž…์„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๊ณ , ํŠน์ˆ˜๋ฌธ์ž์˜ ์ฒ˜๋ฆฌ์˜ ๊ฒฝ์šฐ๋„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.

.js

var name= [[${user.username}]]

2. ๋‚ด์ถ”๋Ÿด ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ O

์ฃผ์„์ด ์ œ๊ฑฐ๋˜์–ด ํ•ด๋‹น ๋ฌธ์žฅ์ด ์‹คํ–‰๋œ๋‹ค.

๊ฒฐ๊ณผ

username= "test username"

3. ๊ฐ์ฒด json ํ• ๋‹น

์ž๋™์œผ๋กœ json ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค.

๊ฒฐ๊ณผ

username={๊ฐ์ฒด์†์„ฑ : ๊ฐ์ฒด๊ฐ’}

4. ๋ฐ˜๋ณต๋ฌธ

each ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค.

.js

[# th:each ๋ฌธ๋ฒ• ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ]

 

15) ๊ณตํ†ต๋œ ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ

์›น ํŽ˜์ด์ง€์˜ ํŠน์ • html์ด ๋ฐ˜๋ณต๋˜์–ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ ํ…œํ”Œ๋ฆฟ์„ ์กฐ๊ฐ๋‚ด์–ด ์‚ฌ์šฉํ•œ๋‹ค.

 

ํ…œํ”Œ๋ฆฟ ์กฐ๊ฐ

[resources]-[template]-[fragment] ํด๋”์— ์กฐ๊ฐ๋‚ธ html ํŒŒ์ผ์„ ์ €์žฅํ•œ๋‹ค.

์กฐ๊ฐ๋‚ธ ํ…œํ”Œ๋ฆฟ์€ ํ•จ์ˆ˜์™€ ๋น„์Šทํ•œ ํ˜•์‹์œผ๋กœ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•œ๋‹ค.

.html

  • ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ…œํ”Œ๋ฆฟ

<ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ๋ช… th:fragment="ํ…œํ”Œ๋ฆฟ ์ด๋ฆ„"> ๋‚ด์šฉ </ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ๋ช…>

  • ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํฌํ•จ๋œ ํ…œํ”Œ๋ฆฟ

<ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ๋ช… th:fragment="ํ…œํ”Œ๋ฆฟ ์ด๋ฆ„ (ํŒŒ๋ผ๋ฏธํ„ฐ 1, ํŒŒ๋ผ๋ฏธํ„ฐ 2)"> </ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ๋ช…>

 

html์˜ ํŠน์ • ๋ถ€๋ถ„์— ํ…œํ”Œ๋ฆฟ ์กฐ๊ฐ ์‚ฌ์šฉ(์‚ฝ์ž…, ๋Œ€์ฒด)

  • ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋‹จ์ˆœ ๊ฐ’์„ ์‚ฌ์šฉ

.html

<ํƒœ๊ทธ๋ช… 1 : insert/replace "~{๊ฒฝ๋กœ :: ํ…œํ”Œ๋ฆฟ ์ด๋ฆ„(ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’)}"></ํƒœ๊ทธ๋ช…>

  • insert : ํ•ด๋‹น ํƒœ๊ทธ ์•ˆ์— ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉ

<ํƒœ๊ทธ๋ช… 1><ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ๋ช…> ๋‚ด์šฉ </ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ๋ช…></ํƒœ๊ทธ๋ช… 1>

  • replace : ํ•ด๋‹น ํƒœ๊ทธ๋ฅผ ํ…œํ”Œ๋ฆฟ์˜ ํƒœ๊ทธ๋กœ ๋Œ€์ฒด

<ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ๋ช…> ๋‚ด์šฉ </ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ๋ช…>

 

  • ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํŠน์ • ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉ

<ํƒœ๊ทธ๋ช… 1 : insert/replace "~{๊ฒฝ๋กœ :: ํ…œํ”Œ๋ฆฟ ์ด๋ฆ„( ~{::๋Œ€์ฒดํƒœ๊ทธ 1}, ~{๋Œ€์ฒดํƒœ๊ทธ 2})}">

<๋Œ€์ฒดํƒœ๊ทธ 1>

<๋Œ€์ฒดํƒœ๊ทธ 2></๋Œ€์ฒดํƒœ๊ทธ 2>

</๋Œ€์ฒดํƒœ๊ทธ 1>

</ํƒœ๊ทธ๋ช… 1>

 

๊ฒฐ๊ณผ

ํ…œํ”Œ๋ฆฟ ์ด๋ฆ„์˜ ์ฝ”๋“œ๊ฐ€ ๋Œ€์ฒดํƒœ๊ทธ ์†์„ฑ์˜ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋˜์–ด ๋žœ๋”๋ง ๋œ๋‹ค.

 

html ์ž์ฒด๋ฅผ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ๋Œ€์ฒด

<html : insert/replace "~{๊ฒฝ๋กœ :: ํ…œํ”Œ๋ฆฟ ์ด๋ฆ„( ~{::๋Œ€์ฒดํƒœ๊ทธ1}~{๋Œ€์ฒดํƒœ๊ทธ2})}">

<๋Œ€์ฒดํƒœ๊ทธ 1>

<๋Œ€์ฒดํƒœ๊ทธ 2></๋Œ€์ฒดํƒœ๊ทธ 2>

</๋Œ€์ฒดํƒœ๊ทธ 1>

</ํƒœ๊ทธ๋ช… 1>

 

Q ์™œ ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ• ๊นŒ?

๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•˜๋ฉด, ๋‚ด์šฉ(์ œ๋ชฉ, ์ฝ˜ํ…์ธ  ๋ถ€๋ถ„)์€ ๋ณดํ˜ธํ•˜๊ณ  ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ๋™์ ์œผ๋กœ ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋‹ค.(footer๋“ฑ์„ ์ผ๊ด„์ ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋“ฑ)

ํŽ˜์ด์ง€๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๊ธฐ ์œ ๋ฆฌํ•˜๋‹ค.(์œ ์‚ฌํ•œ ํŽ˜์ด์ง€๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜์ž. ex ์ผ๊ธฐ์žฅ ๋“ฑ) 

 

 

728x90

'๋ฐฑ์—”๋“œ > Spring-boot' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Intellij] AWS RDS ์—ฐ๊ฒฐ/์‚ฌ์šฉํ•˜๊ธฐ  (1) 2023.11.25