본문 바로가기

스프링

[Spring, Thymeleaf] Form 기본

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