[Spring] MVC 패턴 웹 페이지 5 - 상품 등록 폼

2025. 6. 25. 13:13·Project/Web

이전글에 이어 이번엔 상품 등록 폼을 만들어보자 !

 

[Spring] MVC 패턴 웹 페이지 4 - 상품 상세 페이지

이전 글에 이어 상품 상세 컨트롤러와 뷰를 만들어본다. [Spring] MVC 패턴 웹 페이지 3 - HTML, 그리고 ThymeleafHTML , CSS는 잘 몰라서 부트스트랩 프레임워크의 힘을 빌렸다..스프링 부트에서 정적 리소

bdisappointed.tistory.com


컨트롤러 수정

addForm() 메서드를 추가했다.

아직 등록하지는 않고, 등록 폼을 보여주는 뷰로 이동하는 메서드이다.

package hello.itemservice.web.basic;

import hello.itemservice.domain.item.Item;
import hello.itemservice.domain.item.ItemRepository;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.util.List;

@Controller
@RequestMapping("/basic/items")
@RequiredArgsConstructor // 생성자 만들어줌 + 생성자가 하나니까 AutoWired도 발생
public class BasicItemController {

    private final ItemRepository itemRepository;

    @GetMapping
    public String items(Model model) {
        List<Item> items = itemRepository.findAll();
        model.addAttribute("items", items);
        return "basic/items";
    }

    @GetMapping("/{itemId}") // 해당 URI로 들어오는 쿼리를 변수로 쓸 수 있다
    public String item(@PathVariable Long itemId, Model model) {
        Item item = itemRepository.findById(itemId);
        model.addAttribute("item", item);
        return "basic/item";
    }

    @GetMapping("/add")
    public String addForm() {
        return "basic/addForm";
    }



    // 테스트용 데이터
    @PostConstruct
    public void init() {

        itemRepository.save(new Item("itemA", 10000, 10));
        itemRepository.save(new Item("itemB", 20000, 20));
        itemRepository.save(new Item("itemC", 30000, 30));
    }
}

 

상품 등록 폼 뷰

<!DOCTYPE HTML>
<html>
<head xmlns:th="http://www.thymeleaf.org">
    <meta charset="utf-8">
    <link href="../css/bootstrap.min.css"
          th:href="@{/css/bootstrap.min.css}"
          rel="stylesheet">
    <style>
        .container {
            max-width: 560px;
        }
    </style>
</head>
<body>
<div class="container">
    <div class="py-5 text-center">
        <h2>상품 등록 폼</h2>
    </div>
    <h4 class="mb-3">상품 입력</h4>
    <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>
        <div>
            <label for="price">가격</label>
            <input type="text" id="price" name="price" class="form-control"
                   placeholder="가격을 입력하세요">
        </div>
        <div>
            <label for="quantity">수량</label>
            <input type="text" id="quantity" name="quantity" class="form-control" placeholder="수량을 입력하세요">
        </div>
        <hr class="my-4">
        <div class="row">
            <div class="col">
                <button class="w-100 btn btn-primary btn-lg" type="submit">상품 등록</button>
            </div>
            <div class="col">
                <button class="w-100 btn btn-secondary btn-lg"
                        onclick="location.href='items.html'"
                        th:onclick="|location.href='@{/basic/items}'|"
                        type="button">취소</button>
            </div>
        </div>
    </form>
</div> <!-- /container -->
</body>
</html>

API 설계를 /add 경로에 GET 과 POST 메서드로 구분하여 두가지를 매핑할건데, 상품 입력 action 필드를 보자.

th:actions으로 따로 값을 주지 않고 method만 post로 설정해두었다.

그러면 GET으로 요청이 오던 POST로 요청이 오던 이 뷰로 넘어올텐데, 기본적으로 타임리프는 GET 요청도 쿼리 파라미터 등 없이 기본 GET 요청 을 POST로 변환하여 전송한다.

즉 같은 URL도 파라미터가 있으면 POST의 동작을 수행하고, 없으면 GET 동작을 수행한다고 생각하면 편한다.

'Project > Web' 카테고리의 다른 글

[Spring] MVC 패턴 웹 페이지 7 - 상품 수정 하기 + 리다이렉션 처리  (0) 2025.06.25
[Spring] MVC 패턴 웹 페이지 6 - 상품 등록 처리하기 @ModelAttribute  (0) 2025.06.25
[Spring] MVC 패턴 웹 페이지 4 - 상품 상세 페이지  (0) 2025.06.25
[Spring] MVC 패턴 웹 페이지 3 - HTML, 그리고 Thymeleaf  (0) 2025.06.25
[Spring] MVC 패턴 웹 페이지 2 - 상품 도메인, 저장소 구현  (0) 2025.06.24
'Project/Web' 카테고리의 다른 글
  • [Spring] MVC 패턴 웹 페이지 7 - 상품 수정 하기 + 리다이렉션 처리
  • [Spring] MVC 패턴 웹 페이지 6 - 상품 등록 처리하기 @ModelAttribute
  • [Spring] MVC 패턴 웹 페이지 4 - 상품 상세 페이지
  • [Spring] MVC 패턴 웹 페이지 3 - HTML, 그리고 Thymeleaf
xuv2
xuv2
집에 가고 싶다
  • xuv2
    xuvlog
    xuv2
  • 전체
    오늘
    어제
    • 전체 글 모아보기 (173) N
      • 잡담 (9)
      • 도전 , 자격증 (2)
      • Error (6) N
      • Java (23)
      • Spring (40)
        • Core (10)
        • MVC (21)
        • Thymeleaf (9)
      • DataBase (6)
        • Database Modeling (4)
        • SQL (2)
      • HTTP (11)
      • Network (17)
      • Software Engineering (3)
      • Operating System (3)
      • Algorithm (16)
      • Project (19)
        • Web (9)
        • iOS (8)
        • Python (1)
        • Toy Project (1)
      • A.I (13)
      • Linux (5)
  • 블로그 메뉴

    • 홈
  • 링크

    • Github
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
xuv2
[Spring] MVC 패턴 웹 페이지 5 - 상품 등록 폼
상단으로

티스토리툴바