๋ฐ์ํ
MemberController ์ฝ๋
๋๋ณด๊ธฐ
package hello.hellospring.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import hello.hellospring.domain.Member;
import hello.hellospring.service.MemberService;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
@GetMapping("/members/new")
public String createForm() {
return "members/createMemberForm";
}
@PostMapping("/members/new")
public String create(MemberForm form) {
Member member = new Member();
member.setName(form.getName());
memberService.join(member);
return "redirect:/";
}
@GetMapping("/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
}
createMemberForm.html ์ฝ๋
๋๋ณด๊ธฐ
<!DOCTYPE html>
<html lang="ko">
<body>
<div class="container">
<form action="/members/new" method="post">
<div class="form-group">
<label for="name">์ด๋ฆ</label>
<input type="text" id="name" name="name" placeholder="์ด๋ฆ์ ์
๋ ฅํ์ธ์" />
</div>
<button type="submit">๋ฑ๋ก</button>
</form>
</div>
</body>
</html>
meberList.html ์ฝ๋
๋๋ณด๊ธฐ
<!DOCTYPE html>
<html lang="ko" xmlns="http://www.thymeleaf.org">
<body>
<div class="container">
<table>
<thead>
<tr>
<th>#</th>
<th>์ด๋ฆ</th>
</tr>
</thead>
<tbody>
<tr th:each="member : ${members}">
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
ํ ํ๋ฉด
- controllerํจํค์ง์ HomeControllerํด๋์ค๋ฅผ ๋ง๋ ๋ค.
- ์ปจํธ๋กค๋ฌ ์์ @GetMapping("/") ์ด๋
ธํ
์ด์
์ "home"ํ๋ฉด์ผ๋ก ๊ฐ๋ ๋ฉ์๋์ ๋ถ์ฌ์ค๋ค.
- resources-templates ํด๋ ์์ home.html์ ๋ง๋ ๋ค.
- html ์ฝ๋๋ฅผ ๋ง๋ ๋ค.
๐ก index.html์ด ์์ด๋ ์์ ์ฝ๋๊ฐ ์คํ๋๋ ์ด์ ๋ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋จผ์ ํ์ธํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ ๊ฐ์
- <a href="/members/new">ํ์ ๊ฐ์
</a>
→ controller์ ' /members/new'๋ฅผ ๋ฐ์ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ค์ผ ํ๋ค. - controller์ MemberController ํจํค์ง๋ฅผ ๋ง๋ ๋ค.
- ๋ฉ์๋๋ฅผ ๋ง๋ค์๋ค.
return "members/createMemberForm"; → membersํด๋์ createMemberForm๋ก ์ฐ๊ฒฐ. - resources-templates-members ํด๋ ์์ createMemberForm.html์ ๋ง๋ ๋ค.
- createMemberForm.html
- <form action="/members/new" method="post">
→ post๋ฐฉ์์ผ๋ก '/members/new' ๋ก ์ ์กํ๋ค.
- ๐ก ์ ์ก ๊ธฐ๋ณธ ๋ฐฉ์์ get์ด๋ค. get์ ์ฃผ๋ก ์กฐํ์ ์ฌ์ฉ๋๋ค.
์ ๋ฌํ๋ ๊ณณ์ ๊ฐ์๋ get์ด๋ post๋์ ๋ฐ๋ผ์ ๋๋ ์ ์๋ค.
(post๋ฅผ ๋ฐ๋ ๋ฐฉ์์ ์๋์)
- ๐ก ์ ์ก ๊ธฐ๋ณธ ๋ฐฉ์์ get์ด๋ค. get์ ์ฃผ๋ก ์กฐํ์ ์ฌ์ฉ๋๋ค.
- <input type="text" id="name" name="name" placeholder="์ด๋ฆ์ ์
๋ ฅํ์ธ์" />
→ form์ด ์ ๋ฌ๋ ๋ ์ด๋ฆ์ name="name" ์ผ๋ก ์ ๋ฌ๋๋ค. - <button type="submit">๋ฑ๋ก</button>
→ submit์ ๋๋ฅด๋ฉด formํ๊ทธ๊ฐ ์๋ํด์ action์ ์ ํ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ค. - formํ๊ทธ๊ฐ ๊ถ๊ธํ์๋ค๋ฉด
2024.12.22 - [โจ UI/๐ HTML] - [HTML]๋ฐ์ดํฐ ์ ๋ฌ ๊ณผ ๊ทธ ์์ ์์๋ค(input, select...)
- <form action="/members/new" method="post">
- MemberController์ formํ๊ทธ๋ฅผ ๋ฐ์ ๋ฉ์๋๋ฅผ ๋ง๋ค์๋ค.
- @PostMapping("/members/new")
→ ํฌ์คํธ ๋ฐฉ์์ผ๋ก ์ ๋ฌ๋ "/members/new" ์ฃผ์๋ฅผ ๋ฐ๋๋ค. - public String create(MemberForm form) {
→ MemberForm ํด๋์คํ์ ์ผ๋ก ์ ๋ฌ๋ name์ ๋ฐ๋๋ค. - MemberForm ํด๋์ค
String name์ getter/setter๋ง ์๋ค. - Memberํ์๊ฐ์
ํ๋ ์ฝ๋์ด๋ค.
- return "redirect:/";
→ ๋ฆฌ๋๋ ์ (๋ค๋ฅธ url๋ก ์ด๋)์ ํด์ / ํ ํ๋ฉด์ผ๋ก ์ด๋ํ๋ค.
- @PostMapping("/members/new")
ํ์ ๋ชฉ๋ก
- MemberController์ /member๋ก ๊ฐ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด ํ์์ ๋ชจ๋ ์ฐพ์ membersํด๋์ memberList๋ก ๋ณด๋ธ๋ค.
- membersํด๋์ memberList.html์ ๋ง๋ ๋ค.
- memberList.heml
- <html lang="ko" xmlns="http://www.thymeleaf.org">
→ ํ์๋ฆฌํ๋ฅผ html์ ์ฐ๊ฒฐํ๋ค. - <tr th:each="member : ${members}">
→ ํ์๋ฆฌํ์ each๋ฅผ ์ฌ์ฉํ๋ค. (java์ forEach๋ฌธ๊ณผ ๋์ผํ๋ค.)
Listํํ๋ก ์ ๋ฌ๋ฐ์ members์์ member๋ผ๋ ์ด๋ฆ์ผ๋ก ํ๋์ฉ ๊บผ๋ด ์ฌ์ฉํ๋ค. - <td th:text="${member.id}"></td>
<td th:text= "${member.name}" ></td>
→ member์ id์ name์ ๊บผ๋ด ํ ์ด๋ธ์ ์ถ๋ ฅํ๋ค. - ํ
์ด๋ธ์ ๋ํ html์ฝ๋๊ฐ ๊ถ๊ธํ๋ค๋ฉด
2024.12.22 - [โจ UI/๐ HTML] - [HTML]ํ ์ด๋ธ ๋ง๋ค๊ธฐ & ์ ๋ณํฉ
- <html lang="ko" xmlns="http://www.thymeleaf.org">
- ํ์ ๋ชฉ๋ก ํ๋ฉด์ ํ์๋ฆฌํ๋ฅผ ์ฌ์ฉํด ๊ฐ์
ํ ์ฌ๋ฌ๋ช
์ ํ์์ด ๋ณด์ด๋ ๊ฒ์ด ํ์ธ๋๋ค.
โป ์ฐธ์กฐ : https://www.inflearn.com/roadmaps/373
๋ฐ์ํ
'๐ Spring > ๐ Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SpringBoot]์คํ๋ง ํตํฉํ ์คํธ (0) | 2025.01.08 |
---|---|
[SpringBoot][Gradle]DB์ ๊ทผ๊ธฐ์ -์์JDBC (0) | 2025.01.08 |
[SpringBoot]์คํ๋ง ๋น ๋ฑ๋ก:2.์๋ฐ์ฝ๋ (0) | 2025.01.06 |
[SpringBoot]์คํ๋ง ๋น ๋ฑ๋ก:1.์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์ (0) | 2025.01.06 |
[SpringBoot][JUnit]ํ์๊ด๋ฆฌ-์๋น์ค์ ํ ์คํธ (2) | 2025.01.05 |