Thymeleaf (νμ리ν)
νμ리νλ μλ² μ¬μ΄λ Java ν
νλ¦Ώ μμ§μ
λλ€. HTML, XML, JavaScript, CSS λ±μ λ§ν¬μ
μΈμ΄λ₯Ό μ¬μ©νμ¬ λμ μΉ νμ΄μ§λ₯Ό μμ±νλ λ° μ¬μ©λ©λλ€. νμ리νλ κ°λ¨νκ³ μ§κ΄μ μΈ κ΅¬λ¬Έμ μ 곡νλ©°, Spring Frameworkμμ ν΅ν©μ΄ μ©μ΄ν©λλ€.
Spring Framework μμμ ν
νλ¦Ώ μμ§μΌλ‘ μ¬μ©νλ JSP λ° JSP λΌμ΄λΈλ¬λ¦¬ κΈ°λ₯λ€μ λͺ¨λ λ체ν μ μλ ν
νλ¦Ώ μμ§μ΄λ€.
ν νλ¦Ώ μμ§μ΄λ?
ν
νλ¦Ώ μμ§μ λμ μΉ νμ΄μ§λ₯Ό μμ±νκΈ° μν΄ μ¬μ©λλ λꡬμ
λλ€. ν
νλ¦Ώ μμ§μ 미리 μ μλ ν
νλ¦Ώκ³Ό λ°μ΄ν°λ₯Ό κ²°ν©νμ¬ μ΅μ’
μ μΌλ‘ μΉ νμ΄μ§λ₯Ό μμ±ν©λλ€. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ λμΌν ν
νλ¦Ώμ μ¬μ©νμ¬ λ€μν λ°μ΄ν°λ₯Ό λμ μΌλ‘ μΆλ ₯ν μ μμ΅λλ€. ν
νλ¦Ώ μμ§μ μ£Όλ‘ μλ² μ¬μ΄λμμ μ€νλλ©°, ν΄λΌμ΄μΈνΈμκ² μμ±λ HTMLμ μ 곡ν©λλ€.
νμ리ν μ£Όμ κΈ°λ₯
β’
λ°μ΄ν° λ°μΈλ©: νμ리νλ μλ² μ¬μ΄λμμ λ°μ΄ν°λ₯Ό ν
νλ¦Ώμ λ°μΈλ©νμ¬ λμ μΌλ‘ μΉ νμ΄μ§λ₯Ό μμ±ν μ μμ΅λλ€.
β’
쑰건문과 λ°λ³΅λ¬Έ: νμ리νλ ifλ¬Έκ³Ό λ°λ³΅λ¬Έμ μ¬μ©νμ¬ ν
νλ¦Ώμμ 볡μ‘ν λ‘μ§μ ꡬνν μ μμ΅λλ€.
β’
κ΅μ ν μ§μ: νμ리νλ λ€κ΅μ΄ μ§μμ μν κ΅μ ν κΈ°λ₯μ μ 곡νμ¬ λ€μν μΈμ΄λ‘ μΉ νμ΄μ§λ₯Ό νμν μ μμ΅λλ€.
νμ리ν λ¬Έλ²
β’
νμ리ν λΈλ‘
β¦
th:block
β’
νμ리ν μΆλ ₯
β¦
th:text
β¦
th:html
β¦
th:href
β’
νμ리ν μ μ΄λ¬Έ
β¦
쑰건문
βͺ
th:if
βͺ
th:switch
β¦
λ°λ³΅λ¬Έ
βͺ
th:each
β’
νμ리ν th:object
β’
νμ리ν form
β’
νμ리ν μΈμ
μ 보 κ°μ Έμ€κΈ°
β’
νμ리ν μλ° λ©μλ νΈμΆ
νμ리ν λΈλ‘
νμ리ν <th:block>
νμ리ν th:blockμ νμ리νμ λΈλ‘ νκ·Έλ‘, HTML μμλ₯Ό κ·Έλ£Ήννκ³ μ‘°κ±΄λ¬Έ, λ°λ³΅λ¬Έ λ±μ μ μ©νκΈ° μν΄ μ¬μ©λ©λλ€. th:block νκ·Έ λ΄λΆμ μμλ€μ λ
립μ μΈ λΈλ‘μΌλ‘ μ²λ¦¬λλ©°, νμ리ν ννμκ³Ό ν¨κ» μ¬μ©νμ¬ λμ μΈ μΉ νμ΄μ§λ₯Ό ꡬμ±ν μ μμ΅λλ€.
<th:block> ... </th:block>
HTML
볡μ¬
νμ리ν μΆλ ₯
νμ리ν <th:text>
νμ리ν th:textλ νκ·Έ λ΄λΆμ ν
μ€νΈλ₯Ό λμ μΌλ‘ μ€μ νλ λ° μ¬μ©λ©λλ€. μ΄λ₯Ό ν΅ν΄ μλ²μμ λ°μ λ°μ΄ν°λ₯Ό μΉ νμ΄μ§μ μΆλ ₯ν μ μμ΅λλ€.
<th:text="${data}"></th:text>
HTML
볡μ¬
μμ μμμμλ data λ³μμ κ°μ ν΄λΉ νκ·Έμ ν
μ€νΈλ‘ μ€μ ν©λλ€.
νμ리ν <th:html>
νμ리ν th:htmlμ HTML μμ μμ HTML μ½λλ₯Ό λμ μΌλ‘ μ€μ νλ λ° μ¬μ©λ©λλ€. μ΄λ₯Ό ν΅ν΄ μλ²μμ μμ±λ HTMLμ μΉ νμ΄μ§μ μ½μ
ν μ μμ΅λλ€.
<th:html>${htmlData}</th:html>
HTML
볡μ¬
μμ μμμμλ htmlData λ³μμ μ μ₯λ HTML μ½λλ₯Ό ν΄λΉ νκ·Έ μμ λμ μΌλ‘ μ½μ
ν©λλ€.
νμ리ν <th:href>
νμ리ν th:hrefλ HTML μμμ href μμ±μ λμ μΌλ‘ μ€μ νλ λ° μ¬μ©λ©λλ€. μ΄λ₯Ό ν΅ν΄ μλ²μμ μμ±λ λ§ν¬λ₯Ό μΉ νμ΄μ§μ μ μ©ν μ μμ΅λλ€.
<a th:href="@{/path/to/page}">Link</a>
HTML
볡μ¬
μμ μμμμλ "/path/to/page" κ²½λ‘λ‘ μ΄λνλ λ§ν¬λ₯Ό μμ±ν©λλ€.
<a th:href="@{/path/to/page(param1=${value1}, param2=${value2}">Link</a>
HTML
볡μ¬
μμ κ°μ΄ th:href μμ±μΌλ‘ @{ } κΈ°νΈλ₯Ό μ¬μ©νλ©΄,
(νλΌλ―Έν°1=κ°1, νλΌλ―Έν°2=κ°2) νμμΌλ‘ μμ² νλΌλ―Έν°λ₯Ό λ λλ§ν μ μλ€.
ex) param1: 10, param2 : 20
<a th:href="/path/to/page?param1=10¶m2=20">Link</a>
HTML
볡μ¬
th:href="@{}"μ href="" μ°¨μ΄
th:href="@{}"λ νμ리νμ λ§ν¬ ννμμΌλ‘, νμ리νκ° μ 곡νλ κΈ°λ₯μ μ¬μ©νμ¬ λμ μΌλ‘ λ§ν¬λ₯Ό μ€μ ν μ μμ΅λλ€. λ°λ©΄ href=""λ μ μ μΈ λ°©μμΌλ‘ λ§ν¬λ₯Ό μ§μ νλ HTML μμ±μ
λλ€.
β’
th:href="@{}" μμ: <a th:href="@{/path/to/page}">Link</a>
β’
href="" μμ: <a href="/path/to/page">Link</a>
νμ리νμ th:hrefλ μ ν리μΌμ΄μ
κ²½λ‘μ μλκ²½λ‘λ₯Ό μλμΌλ‘ μ²λ¦¬νλ―λ‘, μ ν리μΌμ΄μ
λ΄λΆμμ μ΄λνλ λ§ν¬λ₯Ό νΈλ¦¬νκ² μμ±ν μ μμ΅λλ€.
νμ리ν μ μ΄λ¬Έ
쑰건문
β’
<th:if>
β’
<th:switch>
νμ리ν <th:if>
νμ리ν th:ifλ 쑰건문μ μ¬μ©νμ¬ ν
νλ¦Ώμμ νΉμ λΆλΆμ 쑰건μ λ°λΌ 보μ¬μ£Όκ±°λ μ¨κΈΈ μ μμ΅λλ€. 쑰건문μ νμ리ν ννμμΌλ‘ μμ±λλ©°, ν΄λΉ μ‘°κ±΄μ΄ μ°ΈμΌ λλ§ ν΄λΉ μμκ° νμλ©λλ€.
<th:if="${condition}">
...
</th:if>
HTML
볡μ¬
μμ μμμμλ conditionμ΄ μ°ΈμΌ λμλ§ ν΄λΉ μμκ° νμλ©λλ€.
<th:if> 쑰건문 μμ
1.
boolean νμ
μ 쑰건μ
2.
κ° λΉκ΅
3.
κ°μ²΄μ λ³μ λΉκ΅
4.
λ¬Έμμ΄ λΉκ΅
boolean νμ μ 쑰건μ
boolean checked = true; // λλ false
Java
볡μ¬
<th:if="${checked}">
<h1>checked μ‘°κ±΄μ΄ true μΌλ</h1>
</th:if>
HTML
볡μ¬
κ° λΉκ΅
int age = 20;
Java
볡μ¬
<th:if="${ age >= 20 }">
<h1>age >= 20 μ‘°κ±΄μ΄ λ§μ‘±ν λ</h1>
</th:if>
HTML
볡μ¬
κ°μ²΄μ λ³μ λΉκ΅
public class Person {
String name = "ALOHA";
int age = 20;
}
Java
볡μ¬
<th:if="${ person.age >= 20 }">
<h1>age >= 20 μ‘°κ±΄μ΄ λ§μ‘±ν λ</h1>
</th:if>
HTML
볡μ¬
λ¬Έμμ΄ λΉκ΅
public class Person {
String name = "ALOHA";
int age = 20;
}
Java
볡μ¬
<th:if="${ person.name == 'ALOHA' }">
<h1>age >= 20 μ‘°κ±΄μ΄ λ§μ‘±ν λ</h1>
</th:if>
HTML
볡μ¬
#strings.equals( λ¬Έμμ΄1, λ¬Έμμ΄2 )
<th:block th:if="${ person != null && #strings.equals( person.name, 'ALOHA' ) }">
<h1 th:text="${ person.name }"></h1>
</th:block>
HTML
볡μ¬
<th:block th:if="${ person != null and person.name == 'ALOHA' }">
<h1 th:text="${ person.name }"></h1>
</th:block>
HTML
볡μ¬
AND μ°μ°μ and λλ && λ‘ μ μ©ν μ μλ€.
<th:block th:if="${ person != null && #strings.equals( person.name, 'ALOHA' ) }">
<h1 th:text="${ person.name }"></h1>
</th:block>
HTML
볡μ¬
<h1 th:text="${ person == null ? 'μ΄λ¦μμ' : person.name }"></h1>
HTML
볡μ¬
νμ리ν <th:switch>
νμ리ν th:switchλ switchλ¬Έκ³Ό λΉμ·ν λμμ μννμ¬ ν
νλ¦Ώμμ λ€μν κ²½μ°μ λ°λΌ λ€λ₯Έ λμμ μ€νν μ μμ΅λλ€. κ° κ²½μ°λ νμ리ν th:case νκ·Έλ‘ μ μλλ©°, 쑰건μ λ°λΌ ν΄λΉ κ²½μ°κ° μ€νλ©λλ€.
<th:switch="${variable}">
<th:case="value1">...</th:case>
<th:case="value2">...</th:case>
<th:case="value3">...</th:case>
...
</th:switch>
HTML
볡μ¬
μμ μμμμλ variableμ κ°μ λ°λΌ ν΄λΉνλ κ²½μ°μ μ½λ λΈλ‘μ΄ μ€νλ©λλ€.
λ°λ³΅λ¬Έ
νμ리ν <th:each>
νμ리ν th:eachλ λ°λ³΅λ¬Έμ μ¬μ©νμ¬ ν
νλ¦Ώμμ λμΌν μμλ₯Ό μ¬λ¬ λ² μΆλ ₯ν μ μμ΅λλ€. λ°λ³΅λ¬Έμ νμ리ν ννμμΌλ‘ μμ±λλ©°, μ§μ λ λ°μ΄ν° 컬λ μ
μ κ° νλͺ©μ λν΄ λ°λ³΅νμ¬ μμλ₯Ό μμ±ν©λλ€.
<th:block th:each="item : ${items}">
...
</th:block>
HTML
볡μ¬
μμ μμμμλ items 컬λ μ
μ κ° νλͺ©μ λν΄ ν΄λΉ μμκ° λ°λ³΅μ μΌλ‘ μμ±λ©λλ€.
items μ λ°°μ΄ λλ 컬λ μ
μ μ§μ νμ¬ μ 체 λ°λ³΅μ ν μ μμ΅λλ€.
1.
κΈ°λ³Έ λ°λ³΅λ¬Έ
2.
λ°λ³΅ κ°μ²΄ μμ±
3.
νν°λ§ 쑰건
4.
μ€μ²© λ°λ³΅λ¬Έ
5.
isEmtpy()
κΈ°λ³Έ λ°λ³΅λ¬Έ
<th:block th:each="μμ, iterStat : ${λ°°μ΄ or 컬λ μ
}">
<th:block th:text="${ μμ }"></th:block>
<th:block th:text="${ μμ.λ³μ }"></th:block>
</th:block>
HTML
볡μ¬
λ°λ³΅ κ°μ²΄ μμ±
μμ± | μ€λͺ
|
iterStat.index | 0λΆν° μμνλ μΈλ±μ€ |
iterStat.count | 1λΆν° μμνλ μλ² |
iterStat.size | 컬λ μ
μ μ΄ ν¬κΈ° |
iterStat.even | νμ¬ μΈλ±μ€κ° μ§μμΈμ§ (true λλ false) |
iterStat.odd | νμ¬ μΈλ±μ€κ° νμμΈμ§ (true λλ false) |
iterStat.first | 첫 λ²μ§Έ μμμΈμ§ (true λλ false) |
iterStat.last | λ§μ§λ§ μμμΈμ§ (true λλ false) |
<th:block th:each="item, iterStat : ${items}">
index : <th:block th:text=${iterStat.index}></th:block>
count: <th:block th:text=${iterStat.count}></th:block>
size: <th:block th:text=${iterStat.size}></th:block>
...
</th:block>
HTML
볡μ¬
νν°λ§ 쑰건
<th:block th:each="μμ, iterStat : ${λ°°μ΄ or 컬λ μ
}"
th:if="${ 쑰건 }">
<th:block th:text="${ μμ }"></th:block>
<th:block th:text="${ μμ.λ³μ }"></th:block>
</th:block>
HTML
볡μ¬
th:each λ°λ³΅ μμμ, th:if="${ 쑰건 }" 쑰건μ λ§μ‘±νλ μμλ§ νν°λ§νμ¬ μΆλ ₯ν μ μλ€.
μ€μ²© λ°λ³΅λ¬Έ
public class Users {
public String username;
public String password;
public String name;
public List<UserAuth> authList;
}
Java
볡μ¬
public class UserAuth {
public String username;
public String auth;
}
Java
볡μ¬
List<Users> userList;
Java
볡μ¬
<th:block th:each="user, iterStat : ${userList}">
<th:block th:text="${user.name}"></th:block>
...
<th:block th:each="auth, iterStat : ${user.authList}">
<th:block th:text="${auth.username}"></th:block>
<th:block th:text="${auth.auth}"></th:block>
...
</th:block>
</th:block>
HTML
볡μ¬
isEmtpy()
μ§μ ν 컬λ μ
μ΄ λΉμ΄ μλμ§ νμΈνλ λ©μλ
<th:block th:if="${ 컬λ μ
.isEmpty()}">
</th:block>
HTML
볡μ¬
<th:block th:if=" #lists.isEmpty( 컬λ μ
) ">
</th:block>
HTML
볡μ¬
th:classappend=β${ 쑰건 ? βμμ±1β : βμμ±2β }β
<th:block th:each=" item, iterStat : ${items}" >
<tr class="row" th:classappend="${ iterStat.odd ? 'odd' : 'even' }">
<td><th:block th:text="${iterStat.index}"></th:block></td>
<td><th:block th:text="${iterStat.count}"></th:block></td>
<td><th:block th:text="${iterStat.size}"></th:block></td>
<td><th:block th:text="${item}"></th:block></td>
<td><th:block th:text="${iterStat.odd}"></th:block></td>
<td><th:block th:text="${iterStat.even}"></th:block></td>
<td><th:block th:text="${iterStat.first}"></th:block></td>
<td><th:block th:text="${iterStat.last}"></th:block></td>
</tr>
</th:block>
HTML
볡μ¬
th:classappend=ββ 쑰건μ λ§μ‘±νλ κ²½μ°μ ν΄λμ€ μμ±μ μΆκ°νλ€.
νμ리ν th:object
νμ리νμ th:objectλ νΌ μ²λ¦¬λ₯Ό κ°μννλ λ° μ¬μ©λλ μ€μν κΈ°λ₯μ
λλ€. μ΄ μμ±μ μ¬μ©νλ©΄ νΌκ³Ό κ΄λ ¨λ κ°μ²΄λ₯Ό μ§μ νμ¬ ν΄λΉ κ°μ²΄μ μμ±μ μ½κ² μ κ·Όν μ μμ΅λλ€.
μ£Όμ νΉμ§:
β’
κ°μ²΄ λ°μΈλ©: th:objectλ₯Ό μ¬μ©νμ¬ νΌμ κ°μ²΄λ₯Ό λ°μΈλ©ν©λλ€. μ΄λ₯Ό ν΅ν΄ νΌ νλμ κ°μ²΄ μμ±μ μ½κ² μ°κ²°ν μ μμ΅λλ€.
β’
*{...} λ¬Έλ²: th:objectμ ν¨κ» *{...} λ¬Έλ²μ μ¬μ©νμ¬ λ°μΈλ©λ κ°μ²΄μ μμ±μ μ§μ μ κ·Όν μ μμ΅λλ€.
β’
μ½λ κ°μν: λ°λ³΅μ μΈ κ°μ²΄ μ°Έμ‘°λ₯Ό μ€μ¬ μ½λλ₯Ό λ κ°κ²°νκ³ μ½κΈ° μ½κ² λ§λλλ€.
th:object="${κ°μ²΄}β
μμ νκ·Έμμ κ°μ²΄λ₯Ό λ±λ‘νκ³ , νμ νκ·Έμμ *{λ³μ} ννλ‘ μ κ·Ό κ°λ₯
<div th:object="${user}">
<ul>
<li th:text="*{no}"></li>
<li th:text="*{id}"></li>
<li th:text="*{username}"></li>
<li th:text="*{password}"></li>
<li th:text="*{name}"></li>
<li th:text="*{ #dates.format( createdAt, 'yyyy-MM-dd HH:mm:ss' ) }"></li>
<li th:text="*{ #dates.format( updatedAt, 'yyyy-MM-dd HH:mm:ss' ) }"></li>
</ul>
</div>
HTML
볡μ¬
νμ리ν form
th:field="*{λ³μ}"
id, name, value μμ±μ μλμΌλ‘ μμ±
<form action="" method="post" th:object="${user}">
<input type="text" th:field="*{no}"> <br>
<input type="text" th:field="*{id}"> <br>
<input type="text" th:field="*{username}"> <br>
<input type="text" th:field="*{password}"> <br>
<input type="text" th:field="*{name}"> <br>
</form>
HTML
볡μ¬
μμκ°μ΄ μ½λλ₯Ό μμ±νλ©΄ μ€μ λ‘λ μλμ κ°μ΄ λλλ§λλ€.
<form action="" method="post">
<input type="text" id="no" name="no" value="1"> <br>
<input type="text" id="id" name="id" value="c8f3ed9e-b16e-4d94-9c5c-1eaf1e5b17f1"> <br>
<input type="text" id="username" name="username" value="ALOHA"> <br>
<input type="text" id="password" name="password" value="123456"> <br>
<input type="text" id="name" name="name" value="μλ‘ν"> <br>
</form>
HTML
볡μ¬
λΌλμ€ λ²νΌ (input type=βradioβ) 체ν¬νκΈ°
<form action="" method="post" th:object="${user}">
...
<input type="radio" id="male" value="λ¨μ" name="gender" th:checked="*{ gender == 'λ¨μ' }">
<label for="male">λ¨μ</label>
<input type="radio" id="female" value="μ¬μ" name="gender" th:checked="*{ gender == 'μ¬μ' }">
<label for="female">μ¬μ</label>
...
</form>
HTML
볡μ¬
μ ν μμ (select) 체ν¬νκΈ°
select μ th:field="*{type}" λ₯Ό μ¬μ©νλ©΄, type κ°κ³Ό μΌμΉνλ option μ μλμΌλ‘ μ ν
<form action="" method="post" th:object="${user}">
...
<select th:field="*{type}">
<option value="μ¬μ©μ νμ
" disabled>μ¬μ©μ νμ
</option>
<option value="μ¬μ©μ">μ¬μ©μ</option>
<option value="κ΄λ¦¬μ">κ΄λ¦¬μ</option>
</select>
...
</form>
HTML
볡μ¬
th:selected=β${ 쑰건 }β, th:selected=β*{ 쑰건 }β ννλ‘ selected μ¬λΆλ₯Ό μ§μ ν μ λ μμ
<form action="" method="post" th:object="${user}">
...
<select name="type">
<option value="μ νμν¨" th:selected="*{ type == null }">μ νμν¨</option>
<option value="μ¬μ©μ" th:selected="*{ type == 'μ¬μ©μ' }">μ¬μ©μ</option>
<option value="κ΄λ¦¬μ" th:selected="*{ type == 'κ΄λ¦¬μ' }">κ΄λ¦¬μ</option>
</select>
...
</form>
HTML
볡μ¬
λ μ§ (input type=βdateβ) λ°μ΄ν°λ₯Ό κ°μ μ§μ νκΈ°
βyyyy-MM-ddβ ν¬λ§·μ κ°μ μ§μ ν΄μ£Όλ©΄ λ€μ΄κ°λ€
<form action="" method="post" th:object="${user}">
...
<input type="date" th:value="*{ #dates.format( createdAt, 'yyyy-MM-dd' ) }"
id="createdAt" name="createdAt"> <br>
<input type="date" th:value="*{ #dates.format( updatedAt, 'yyyy-MM-dd' ) }"
id="updatedAt" name="updatedAt"> <br>
...
</form>
HTML
볡μ¬
νμ리ν μΈμ μ 보 κ°μ Έμ€κΈ°
// λ‘κ·ΈμΈ μ μ
Users loginUser = new Uers();
loginUser.setNo(1L);
loginUser.setId( UUID.randomUUID().toString() );
loginUser.setUsername("ALOHA");
loginUser.setPassword("123456");
loginUser.setName("μ€μΉμ");
loginUser.setGender("μ¬μ"); // λ¨μ μ¬μ
loginUser.setType("κ΄λ¦¬μ"); // μ¬μ©μ κ΄λ¦¬μ
loginUser.setCreatedAt(new Date());
loginUser.setUpdatedAt(new Date());
loginUser.setAuthList(authList);
session.setAttribute("loginUser", loginUser);
model.addAttribute("loginUser", loginUser);
Java
볡μ¬
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Users {
private Long no;
private String id;
private String username;
private String password;
private String name;
private String gender;
private String type;
private Date createdAt;
private Date updatedAt;
List<UserAuth> authList;
// μ¬μ©μ κΆν νμΈ λ©μλ
public boolean containsAuth(String auth) {
for (UserAuth userAuth : authList) {
if (userAuth.getAuth().equals(auth)) {
return true;
}
}
return false;
}
}
Java
볡μ¬
<!-- μΈμ
κ°μ Έμ€κΈ° -->
<h2>${session.loginUser}</h2>
<h3 th:text="${session.loginUser.name}"></h3>
<h3 th:text="${session.loginUser.username}"></h3>
<h3 th:text="${session.loginUser.password}"></h3>
HTML
볡μ¬
νμ리ν μλ° λ©μλ νΈμΆ
// κΆν
UserAuth roleUser = UserAuth.builder().auth("ROLE_USER").build();
UserAuth roleAdmin = UserAuth.builder().auth("ROLE_ADMIN").build();
List<UserAuth> authList = List.of( roleUser, roleAdmin );
// λ‘κ·ΈμΈ μ μ
Users loginUser = new Uers();
loginUser.setNo(1L);
loginUser.setId( UUID.randomUUID().toString() );
loginUser.setUsername("ALOHA");
loginUser.setPassword("123456");
loginUser.setName("μ€μΉμ");
loginUser.setGender("μ¬μ"); // λ¨μ μ¬μ
loginUser.setType("κ΄λ¦¬μ"); // μ¬μ©μ κ΄λ¦¬μ
loginUser.setCreatedAt(new Date());
loginUser.setUpdatedAt(new Date());
loginUser.setAuthList(authList);
Java
볡μ¬
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Users {
private Long no;
private String id;
private String username;
private String password;
private String name;
private String gender;
private String type;
private Date createdAt;
private Date updatedAt;
List<UserAuth> authList;
// μ¬μ©μ κΆν νμΈ λ©μλ
public boolean containsAuth(String auth) {
for (UserAuth userAuth : authList) {
if (userAuth.getAuth().equals(auth)) {
return true;
}
}
return false;
}
}
Java
볡μ¬
@Data
@Builder
public class UserAuth {
private String username;
private String auth;
}
Java
볡μ¬
...
<input type="checkbox" name="authList" id="role_user"
th:checked="${ loginUser.containsAuth('ROLE_USER') }">
<label for="role_user">ROLE_USER</label>
<input type="checkbox" name="authList" id="role_admin"
th:checked="${ loginUser.containsAuth('ROLE_ADMIN') }">
<label for="role_admin">ROLE_ADMIN</label>
<br>
HTML
볡μ¬
Users κ°μ²΄μ containsAuth() λ©μλλ₯Ό νΈμΆνμ¬ ν΄λΉ κ°μ²΄κ° νΉμ κΆν (βROLE_USERβ, βROLE_ADMINβ) μ κ°μ§κ³ μλμ§ νμΈν΄λ΄
λλ€.