오봉이와 함께하는 개발 블로그
스프링 MVC 2 - 입력 폼 처리 본문
입력 폼 처리
타임리프가 제공하는 입력 폼 기능을 적용해서 폼 코드를 타임리프가 지원하는 기능을 사용해서 효율적으로 개선해보자.
th:object
: 커맨드 객체를 지정한다.*{...}
: 선택 변수 식이라고 한다. th:object
에서 선택한 객체에 접근th:field
: HTML 태그의 id
, name
, value
속성을 자동으로 처리해준다.
렌더링 전<input type="text" th:field="*{itemName}" />
렌더링 후<input type="text" id="itemName" name="itemName" th:value="*{itemName}" />
등록 폼
th:object
를 적용하려면 먼저 해당 오브젝트 정보를 넘겨야 한다.
등록 폼이기 때문에 데이터가 비어있는 빈 오브젝트를 만들어서 전달하자.
@GetMapping("/add")
public String addForm(Model model) {
model.addAttribute("item", new Item()); // 기존에는 없었다.
return "form/addForm";
}
변경 전
<form action="item.html" th:action method="post">
<div>
<label for="itemName">상품명</label>
<input type="text" id="itemName" name="itemName" class="form-control" placeholder="이름을 입력하세요">
</div>
<!-- 이하 코드 -->
변경 후
<form action="item.html" th:object="${item}" th:action method="post">
<div>
<label for="itemName">상품명</label>
<input type="text" th:field="*{itemName}" class="form-control" placeholder="이름을 입력하세요">
</div>
<!-- 이하 코드 -->
th:object="${item}"
: <form>
에서 사용할 객체를 지정한다. 선택 변수 식(*{...}
)을 적용할 수 있다.
th:value="*{itemName}"
: *{itemName}
은 선택 변수 식을 사용 했는데 ${item.itemName}
과 같다.th:object
로 item
을 선택했기 때문에 선택 변수 식을 적용할 수 있다.th:field
는 id
, name
, value
속성을 모두 자동으로 만들어준다.id
, name
, value
: th:field
에서 지정한 변수 이름과 같다. 단, value
는 th:field
에서 지정한 변수의 값
을 사용한다.
-> id="itemName"
, name="itemName"
, value=""
렌더링 전<input type="text" th:field="*{itemName}" class="form-control" placeholder="이름을 입력하세요">
렌더링 후<input type="text" id="itemName" class="form-control" placeholder="이름을 입력하세요" name="itemName" value="">
수정 폼
@GetMapping("/{itemId}/edit")
public String editForm(@PathVariable Long itemId, Model model) {
Item item = itemRepository.findById(itemId);
model.addAttribute("item", item);
return "form/editForm";
}
수정 전
<form action="item.html" th:action method="post">
<div>
<label for="id">상품 ID</label>
<input type="text" id="id" name="id" class="form-control" value="1" th:value="${item.id}" readonly>
</div>
<!-- 이하 코드 -->
수정 후
<form action="item.html" th:object="${item}" th:action method="post">
<div>
<label for="id">상품 ID</label>
<input type="text" class="form-control" value="1" th:field="*{id}" readonly>
</div>
<!-- 이하 코드 -->
렌더링 전<input type="text" th:field="*{itemName}" class="form-control">
렌더링 후<input type="text" id="itemName" class="form-control" name="itemName" value="itemA">
정리
th:object
, th:field
덕분에 폼을 개발할 때 약간의 편리함이 생긴다.
이 기능의 진면모는 검증(Validation)에서 나타난다.
출처 : 인프런 김영한 지식공유자님 강의 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
'BE > Thymeleaf' 카테고리의 다른 글
스프링 MVC 2 - 체크 박스 단일 (0) | 2022.08.17 |
---|---|
스프링 MVC 2 - 요구사항 추가 (0) | 2022.08.17 |
스프링 MVC 2 - 타임리프 스프링 통합 (0) | 2022.08.17 |
스프링 MVC 2 - 템플릿 레이아웃 (0) | 2022.08.17 |
스프링 MVC 2 - 타임리프 템플릿 조각 (0) | 2022.08.17 |