스프링

[Spring, Thymeleaf] Form 기본

gilssang97 2021. 9. 23. 10:20

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를 활용하자.)