BackEnd/spring

간단한 Web페이지 프로젝트(3)- 상품 상세

연향동큰손 2024. 7. 5. 15:59

 

목표

 

상품명이나 ID를 누르면 상품 상세 정보를 띄우도록 한다.

 

 

설계

 

1) BasicItemController에서 PathVariable로 넘어온 상품 ID로 상품을 조회하고, 모델에 담아둔다. 그리고 뷰템플릿을 호출한다.

@GetMapping("/{itemId}")
public String item(@PathVariable("itemId") Long itemId, Model model) {
    Item item = itemRepository.findById(itemId);
    model.addAttribute("item", item);
    return "basic/item";
}

 

 

2) 정적 HTML을 뷰 템플릿(templates) 영역으로 복사하고 수정

 

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8">
    <link  th:href="@{/css/bootstrap.min.css}"
            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>
    <div>
        <label for="itemId">상품 ID</label>
        <input type="text" id="itemId" name="itemId" class="form-control"
               value="1" th:value="${item.id}" readonly>
    </div>
    <div>
        <label for="itemName">상품명</label>
        <input type="text" id="itemName" name="itemName" class="form-control"
               value="상품A"  th:value="${item.itemName}" readonly>
    </div>
    <div>
        <label for="price">가격</label>
        <input type="text" id="price" name="price" class="form-control"
               value="10000"  th:value="${item.price}" readonly>
    </div>
    <div>
        <label for="quantity">수량</label>
        <input type="text" id="quantity" name="quantity" class="form-control"
               value="10" th:value="${item.quantity}" readonly>
    </div>
    <hr class="my-4">
    <div class="row">
        <div class="col">
            <button class="w-100 btn btn-primary btn-lg"
                    onclick="location.href='editForm.html'"
                    th:onclick="|location.href='@{basic/item/{itemId}/edit(itemId=${item.id})}'|"
                    type="button">상품 수정</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>
</div> <!-- /container -->
</body>
</html>

 

이 전에 했던 item.html을 수정했던 것 처럼 타임리프 선언해주고, 아래 코드를 추가해준다.

th:href="@{/css/bootstrap.min.css}"

 

 

아래 코드와 같이 수정하면 원래 상품ID가 1로만 나오던게 이제는 th:value="${item.id}"로 모델에 있는 item정보를 획득하고 프로퍼티 접근법으로 출력한다.

<div>
    <label for="itemId">상품 ID</label>
    <input type="text" id="itemId" name="itemId" class="form-control"
           value="1" th:value="${item.id}" readonly>
</div>

 

 

마찬가지로 상품명,가격,수량도 동일한 방식으로 불러와준다.

 

 

<수정 후 상품 상세 실행 결과>

 

상품 상세 창에 있는 "상품 수정", "목록으로" 버튼의 링크도 다음과 같이 수정해준다.

 

th:onclick="|location.href='@{basic/item/{itemId}/edit(itemId=${item.id})}'|"
th:onclick="|location.href='@{/basic/items}'|"