Form 기본
간단한 예제로 폼을 완성하는 것을 해보자.
우리는 이름, 나이, 학과, 전공을 입력하는 인풋 박스를 만들고 값을 입력받아 서버에 전달하고
해당 값들에 대해 요약해주는 페이지로 이동하는 서비스를 구성해보자.
@GetMapping("/home")
public String home(Model model){
model.addAttribute("person", new Person());
return "home";
}
- 해당 URL로 요청시 person이라는 객체를 넘겨 데이터를 저장할 수 있도록 한다.
<form th:action method="post" th:object="${person}">
<label>
<p class="label-txt"><b>이름을 입력하세요.</b></p>
<input type="text" id="name" class="input" th:field="*{name}">
<div class="line-box">
<div class="line"></div>
</div>
</label>
<label>
<p class="label-txt"><b>나이를 입력하세요.</b></p>
<input type="text" class="input" th:field="*{age}">
<div class="line-box">
<div class="line"></div>
</div>
</label>
<label>
<p class="label-txt"><b>학과를 입력하세요.</b></p>
<input type="text" class="input" th:field="*{department}">
<div class="line-box">
<div class="line"></div>
</div>
</label>
<label>
<p class="label-txt"><b>전공을 입력하세요.</b></p>
<input type="text" class="input" th:field="*{major}">
<div class="line-box">
<div class="line"></div>
</div>
</label>
<button type="submit">제출</button>
</form>
- th:object="${객체명}"을 통해 사용할 객체를 간단하게 지정할 수 있다.
- th:field="*{속성명}"을 통해 간단하게 선택된 객체에 대한 속성들을 간단하게 지정할 수 있다.
- th:field를 사용할 시에 id, name, value 속성을 자동으로 생성해주기에 따로 명시할 필요가 없다. (field 값과 동일하게 생성)
@PostMapping("/home")
public String receive(@ModelAttribute Person person) {
return "intro";
}
- 폼으로부터 전달된 값을 토대로 intro.html를 출력한다.
<label>
<p class="label-txt" th:text="'이름은 ' + ${person.name} + '입니다.'"></p>
<p class="label-txt" th:text="|나이는 ${person.age}입니다.|"></p>
<p class="label-txt" th:utext="|학과는 <b>${person.department}</b>입니다.|"></p>
<p class="label-txt" th:utext="|전공은 <b>${person.major}</b>입니다.|"></p>
</label>
- 폼으로부터 전달된 값이 @PostMapping을 통해 전달이 되었고 이게 intro.html에 전달되었다.
- 이를 간단하게 출력해주었다.
- /home URL에 대해 Get 요청이 통과되어 다음과 같은 결과를 보인다.
- 폼을 통해 입력된 결과가 잘 출력되었다.
- 단순히 내부에서 forward된 것이기 때문에 URL은 변경되지 않았다. (이를 해결해주기 위해서는 redirect를 활용하자.)
'스프링' 카테고리의 다른 글
메세지 소스, 국제화 (0) | 2021.09.23 |
---|---|
[Spring, Thymeleaf] Form 심화 (0) | 2021.09.23 |
[Thymeleaf] 반복, 조건, 블럭 (0) | 2021.09.22 |
[Thymeleaf] 연산, 속성값 (0) | 2021.09.22 |
[Thymeleaf] 텍스트, spring EL, 객체, URL 링크, 리터럴 (0) | 2021.09.22 |