01.Thymeleaf
Thymeleaf
κΈ°λ³Έ κΈ°λ₯
μ¬μ© μ μΈ
μμ± λ³κ²½
URL λ§ν¬ ννμ
μμ± λ³κ²½
λ°λ³΅ μΆλ ₯
λ³μ ννμ
μμ± λ³κ²½
κΈ°λ³Έ ννμ
ν
μ€νΈ
ν μ€νΈ μΆλ ₯
κΈ°λ³Έμ μΌλ‘ escape λ₯Ό μ 곡
escape : HTML μμ μ¬μ©νλ νΉμ λ¬Έμλ₯Ό HTML μν°ν°λ‘ λ³κ²½νλ κ²
HTML μν°ν° :
<
λ¬Έμλ₯Ό νκ·Έμ μμμ΄ μλ λ¬Έμλ‘ νννλ λ°©λ²
Unescape
th:text
-->th:utext
[[...]]
-->[(...)]
SpringEL ννμ
Object
${user.username}
= userA${user['username']}
= userA${user.getUsername()}
= userA
List
${users[0].username}
= userA${users[0]['username']}
= userA${users[0].getUsername()}
= userA
Map
${userMap['userA'].username}
= userA${userMap['userA']['username']}
= userA${userMap['userA'].getUsername()}
= userA
Safe Navigation Operator
μ§μλ³μ
κΈ°λ³Έ κ°μ²΄
Thymeleaf κΈ°λ³Έ κ°μ²΄
${#request}
${#response}
${#session}
${#servletContext}
${#locale}
νΈμ κ°μ²΄
HTTP μμ² νλΌλ―Έν° μ κ·Ό:
${param.paramData}
HTTP μΈμ μ κ·Ό:
${session.sessionData}
μ€νλ§ λΉ μ κ·Ό:
${@helloBean.hello('Spring!')}
μ νΈλ¦¬ν° κ°μ²΄μ λ μ§
#message : λ©μμ§, κ΅μ ν μ²λ¦¬
#uris : URI μ΄μ€μΌμ΄ν μ§μ
#dates : java.util.Date μμ μ§μ
#calendars : java.util.Calendar μμ μ§μ
#temporals : μλ°8 λ μ§ μμ μ§μ
#numbers : μ«μ μμ μ§μ
#strings : λ¬Έμ κ΄λ ¨ νΈμ κΈ°λ₯
#objects : κ°μ²΄ κ΄λ ¨ κΈ°λ₯ μ 곡
#bools : boolean κ΄λ ¨ κΈ°λ₯ μ 곡
#arrays : λ°°μ΄ κ΄λ ¨ κΈ°λ₯ μ 곡
#lists , #sets , #maps : 컬λ μ κ΄λ ¨ κΈ°λ₯ μ 곡
#ids : μμ΄λ μ²λ¦¬ κ΄λ ¨ κΈ°λ₯ μ 곡, λ€μμ μ€λͺ
Reference
URL λ§ν¬
λ¨μ URL
/hello
query parameter
/hello?param1=data1¶m2=data2
path variable
/hello/data1/data2
query parameter + path variable
/hello/data1?param2=data2
Reference
리ν°λ΄
λ¬Έμ: 'hello' (λ¬Έμ 리ν°λ΄μ νμ μμλ°μ΄νλ‘ κ°μΈμΌ ν¨)
μ«μ: 10
λΆλ¦°: true , false
null: null
μ°μ°
μ°μ μ°μ°
λΉκ΅ μ°μ°
쑰건μ
Elvis μ°μ°μ
No-Operation
μμ± κ° μ€μ
μμ± μ€μ
μμ± μΆκ°
checked μ²λ¦¬
λ°λ³΅
λ°λ³΅
μν μ μ§
index : 0λΆν° μμ
count : 1λΆν° μμ
size : μ 체 μ¬μ΄μ¦
even , odd : ν/μ§μ μ¬λΆ
first , last :μ²μ/λ§μ§λ§ μ¬λΆ
current : νμ¬ κ°μ²΄
μ‘°κ±΄λΆ νκ°
if, unless
switch
μ£Όμ
νμ€ HTML μ£Όμ
νμ리νκ° λ λλ§νμ§ μκ³ μ μ§
νμ리ν νμ μ£Όμ
λ λλ§μμ μ£Όμ λΆλΆμ μ κ±° (νμ리ν μ£Όμ)
νμ리ν νλ‘ν νμ μ£Όμ
νμ리ν λ λλ§μ κ±°μ³μΌλ§ μ΄ λΆλΆμ΄ μ μ λ λλ§ (HTML μμλ§ μ£Όμ μ²λ¦¬)
λΈλ‘
th:each λ‘ ν΄κ²°μ΄ μ΄λ €μΈ λ μ¬μ©
JavaScript Inline
javascript inline
each
ν
νλ¦Ώ μ‘°κ°
/resources/templates/template/fragment/footer.html
/resources/templates/template/fragment/fragmentMain.html
ν
νλ¦Ώ λ μ΄μμ
λμ μΈ λ μ΄μμ
/resources/templates/template/layout/base.html
λ μ΄μμμ΄λΌλ ν° ν
/resources/templates/template/layout/layoutMain.html
ν μμ νμν μ½λ μ‘°κ°λ€μ μ λ¬
::title μ νμ¬ νμ΄μ§μ title tag λ€μ μ λ¬
::link μ νμ¬ νμ΄μ§μ link tag λ€μ μ λ¬
λ©μΈ λ μ΄μμ
/resources/templates/template/layoutExtend/layoutFile.html
κΈ°λ³Έ λ μ΄μμ(header, footer) νμ μ μ§νκ³ title, content λ§ λ³κ²½
/resources/templates/template/layoutExtend/layoutExtendMain.html
κΈ°λ³Έ λ μ΄μμ νλ‘ κ΅μ²΄νλλ° νλλ° title, content λ μ λ¬
Form
μ
λ ₯ νΌ μ²λ¦¬
th:object
: 컀맨λ κ°μ²΄λ₯Ό μ§μ \*{...}
: μ ν λ³μ μ (th:object μμ μ νν κ°μ²΄μ μ κ·Ό)th:field
: HTML νκ·Έμ id , name , value μμ±μ μλμΌλ‘ μμ±λ λλ§ μ /ν
μ²΄ν¬ λ°μ€
λ¨μΌ
Register
νμ리νκ° μλμΌλ‘
<input type="hidden" name="_open" value="on"/>
μμ±μ²΄ν¬ λ°μ€λ₯Ό 체ν¬ν κ²½μ° on μ μ λ¬νμ§λ§, 체ν¬νμ§ μμ κ²½μ° κ° μ체λ₯Ό μ λ¬νμ§ μμ -> μ΄ κ²½μ° hidden type μ _name input νκ·Έλ₯Ό μ¬μ©νκ² λλ©΄, false λ‘ κ°μ μ λ¬ (_open=on)
View
λ©ν°
(μ°Έκ³ ) @ModelAttribute λ₯Ό μ¬μ©νλ©΄ ν΄λΉ Controller νΈμΆ μ regions() μμ λ°νν κ°μ΄ μλμΌλ‘ Modelμ νμ λ΄κΈ°κ² λ¨
Register
νμ리νλ eachλ‘ μ²΄ν¬λ°μ€ μμ± μ λμ μΌλ‘ idμ μλ²μ 맀겨μ€λ€.
#ids
λ λμ μΌλ‘ μμ±λ idλ₯Ό μΈμresult
View
νμ리νλ
th:field
μ μ§μ ν κ°κ³Όth:value
μ κ°μ λΉκ΅ν΄μ 체ν¬λ₯Ό μλμΌλ‘ μ²λ¦¬
λΌλμ€ λ²νΌ
λΌλμ€ λ²νΌμ νμ νλμ κ°μ΄ μ νλμ΄μΌ νλ―λ‘ νλ λ²νΌμ λ°λ‘ μμ±νμ§ μμ.
μ
λ νΈ λ°μ€
Register
Reference
Last updated