본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : 상품 상세 페이지 타임리프 적용 및 목록으로 가기 구현

by 오주현 2022. 2. 3.
반응형

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

@pathVariable로 요청 값을 받아서 조회하고 model에 담아두고 뷰 템플릿을 호출해 준다.

 

<html xmlns:th="http://www.thymeleaf.org">

타임 리프를 사용하기 위해 html 코드에 위 코드를 추가해 주고

 

<link href="../css/bootstrap.min.css"
 th:href="@{/css/bootstrap.min.css}" rel="stylesheet">

동적 웹 페이지를 위해 th:href 를 사용해서 경로를 잡아준다.

 

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

제품을 상세 조회 했을 때 등록한 정보에 맞게 나오게 하기 위해 각 표시 부분에 th:value를 추가해 주준다. 예를 들어 상품 ID를 확인해 보면 th:value를 통해 itemId를 받아온다. 이 itemId는 위에 model에 담은 값을 표현하게 된다.

 

th:value=”${...}”를 사용하게 되면 model에 있는 item 정보를 획득하게 되고 프로퍼티 접근 법으로출력하게 된다.

(item.getId()), 또한, 옆에 있는 value 속성을 th:value로 변경하게 된다.

 

상품 등록 폼도 코딩해주었다.

 

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

컨트롤러에 GetMapping 코드를 추가해 주었다.

 

<html xmlns:th="http://www.thymeleaf.org">

<link href="../css/bootstrap.min.css"
 th:href="@{/css/bootstrap.min.css}" rel="stylesheet">

일단 공통 부분으로 타임리프를 사용하기 위해 html에 선언을 해놓고 부트스트랩 css를 사용하기 위해 link에 th:href를 추가했다. 이 부분은 공통적으로 계속해서 적용했고 강사님이 include, 인클루드(?)를 통해 반복되는 부분을 해결할 수 있다고 했는데 이번 강의에서는 다루지 않고 다음 강의에서 타임리프에 대해 조금 더 공부하면서 다룬다고 했다.

 

<form action="item.html" th:action method="post">

먼저 action을 다듬어 주었는데 item.html은 정적 웹 페이지이고 타임리프를 사용하는 페이지로 action을 주기 위해 th:action을 사용했다.

 

th:action은 HTML form에서 action에 값이 없다면 현재 URL에 데이터를 전송하는 역할을 한다. 상품 등록 폼의 URL과 실제 상품 등록을 처리하는 URL을 똑같이 맞추고 HTTP 메서드로 두 기능을 구분하게 된다. - 컨트롤러 코딩을 다 적지 않았지만 같은 경로를 GetMapping과 PostMapping으로 나누어 작성해 효과적이게 사용했다.

 

<button class="w-100 btn btn-secondary btn-lg"
onclick="location.href='items.html'"
 th:onclick="|location.href='@{/basic/items}'|"
 type="button">취소</button>

그리고 추가로 취소 버튼을 눌렀을 때 목록으로 돌아가게 끔 코딩해 주었다.

 

정적 웹 페이지에서는 onclick를 사용했는데 이번에는 th:onclick를 사용해서 리터럴 대체 표현식을 활용하여 동적 웹 페이지를 완성시켰다.


스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.

반응형

댓글