인프런 커뮤니티 질문&답변

윽이럴뚜가님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

상품 수정

썜. updateItemForm에는 action이 왜 없나요

작성

·

647

0

@GetMapping("items/{itemId}/edit")
public String updateItemForm(@PathVariable("itemId") Long itemId, Model model) {
Book item = (Book) itemService.findOnd(itemId);


model.addAttribute("form", item);

return "items/updateItemForm";
}

수정버튼 눌렀을경우 바로 이렇게 item을 때려 박아서 정보를 줘도 되지않나요.

왜 폼에 넣고 폼을 전달하나요

아참. 이게 본 질문입니다.

action이 없어도 되는건가요? method는 있네요.

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="fragments/header :: header"/>
<body>
<div class="container">
<div th:replace="fragments/bodyHeader :: bodyHeader"/>
<form th:object="${form}" method="post">
<!-- id -->
<input type="hidden" th:field="*{id}"/>
<div class="form-group">
<label th:for="name">상품명</label>
<input type="text" th:field="*{name}" class="form-control"
placeholder="이름을 입력하세요"/>
</div>
<div class="form-group">
<label th:for="price">가격</label>
<input type="number" th:field="*{price}" class="form-control"
placeholder="가격을 입력하세요"/>
</div>
<div class="form-group">
<label th:for="stockQuantity">수량</label> <input type="number" th:field="*{stockQuantity}"
class="formcontrol"
placeholder="수량을 입력하세요"/>
</div>
<div class="form-group">
<label th:for="author">저자</label>
<input type="text" th:field="*{author}" class="form-control"
placeholder="저자를 입력하세요"/>
</div>
<div class="form-group">
<label th:for="isbn">ISBN</label>
<input type="text" th:field="*{isbn}" class="form-control"
placeholder="ISBN을 입력하세요"/>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
<div th:replace="fragments/footer :: footer"/>
</div> <!-- /container -->
</body>
</html>

답변 2

3

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 윽이럴뚜가님^^

1. 맞습니다. item 엔티티를 그냥 넘겨도 상관없습니다. 그런데 실무에서는 form과 엔티티의 데이터가 딱 안맞는 경우가 많습니다. 예를 들어서 form에 추가 정보가 더 필요한데, item 엔티티와는 전혀 관계없는 데이터 일 수 있지요. 우리가 주문할 때 생각해보면 item만 출력하는게 아니라 약관 정보나 등등 다른 도메인의 여러 정보가 필요합니다. 그런데 간단한 경우에는 그렇게 item을 바로 출력해도 됩니다.

2. action을 생략한걸 들켰네요 ㅎㅎ

action을 생략하면 현재 URL을 그대로 사용합니다. 대신에! 전송방식이 GET에서 POST로 변경되었지요! 이게 중요합니다. 같은 URL인데, 수정 화면을 노출할 때는 GET을 사용하고, 수정 화면의 데이터를 실제 변경할 떄는 POST를 사용했다는 것입니다. 이런 방식이 좋은 URL 설계 방식입니다^^

도움이 되셨길 바래요.

2

와우 오마이갓김치 입니다.

역시 생략된것이었군요.

아. 딱딱 안맞는경우가 대부분이라고 하시니 따로 객체를 적당한 시점에 만드는 습관을 들여야겠군요. (다시 코드수정해야겠다.)

이제 파트2 결제하고 조지러 가겠습니다.

질문이 많아서 죄송합니다.