상품 상세
상품 상세의 전반적인 흐름은 아래와 같습니다.
list.html 페이지에서 http://localhost/detail/상품코드 형식으로 만들어진 하이퍼링크를 클릭합니다.
상품코드가 Controller 에 전달됩니다. repository 에서 sql 명령어를 생성하고 실행하여 상품코드에 해당하는 1개의 레코드를 Controller에 되돌려줍니다.
Controller는 그 자료를 저장하여 detail.html 페이지에 보내 출력시킵니다.
[해설]
<a th:href="@{/detail/}+${row.productCode}">
상품명: [[${row.productName}]]<br>
가격: [[${#numbers.formatInteger(row.price, 0, 'COMMA')}]]원</a>
상품정보를 클릭하면 상세페이지로 이동하기 위하여 하이퍼링크를 걸었습니다.
하이퍼링크 태그의 형식은 아래와 같습니다.
th:href="@{/detail/}+${row.productCode}"
@{} 안에는 고정적인 url pattern을 작성합니다. ${row.productCode}는 상품코드입니다.
상품코드가 1번이라면 http://localhost/detail/1 로 url이 구성됩니다.
아래는 컨트롤러의 detail() 함수 부분입니다.
@GetMapping("detail/{productCode}")
하이퍼링크를 클릭하여 이동하는 방식은 get 방식이므로 @GetMapping을 사용했습니다.
상세화면을 보기 위한 url의 형식을 아래와 같이 만들었습니다.
http://localhost/detail/{상품코드}
상품코드가 1번이라면 http://localhost/detail/1 이 됩니다.
상품코드는 클릭할 때마다 바뀌므로 변수로 처리해야 합니다.
public ModelAndView detail(@PathVariable long productCode, ModelAndView mav) {
이 변수는 url에 포함되는 변수이므로 @PathVariable 어노테이션을 붙여서 값을 전달했습니다.
mav.setViewName("detail");
출력 페이지를 detail.html로 지정합니다.
Optional<Product> opt = productRepository.findById(productCode);
Product dto = opt.get();
repository에서 sql 명령어를 실행하여 해당하는 레코드를 조회합니다. 그런데 상품코드에 해당하는 상품이 조회가 안될 수도 있습니다. 레코드가 존재하지 않을 경우 NullPointerException 이 발생하므로 Optional을 이용하여 처리하게 됩니다.
mav.addObject("dto", dto);
변수명을 dto로 하고 상품코드에 해당하는 레코드를 dao에 요청합니다.
[실행 결과]
상품목록에서 상품정보 링크를 클릭하면 해당되는 상품의 상세 정보를 출력합니다.
번호 | 제목 | 작성자 | 작성일 | 추천 | 조회 |
19 |
상품 삭제
vita
|
2023.11.15
|
추천 0
|
조회 131
|
vita | 2023.11.15 | 0 | 131 |
18 |
상품 수정
vita
|
2023.11.15
|
추천 0
|
조회 112
|
vita | 2023.11.15 | 0 | 112 |
17 |
상품 상세
vita
|
2023.11.15
|
추천 0
|
조회 125
|
vita | 2023.11.15 | 0 | 125 |
16 |
상품 등록
vita
|
2023.11.15
|
추천 0
|
조회 105
|
vita | 2023.11.15 | 0 | 105 |
15 |
상품 목록
vita
|
2023.11.15
|
추천 0
|
조회 146
|
vita | 2023.11.15 | 0 | 146 |
14 |
14. detail.html
vita
|
2023.11.15
|
추천 0
|
조회 119
|
vita | 2023.11.15 | 0 | 119 |
13 |
13. write.html
vita
|
2023.11.15
|
추천 0
|
조회 135
|
vita | 2023.11.15 | 0 | 135 |
12 |
12. list.html
vita
|
2023.11.15
|
추천 0
|
조회 130
|
vita | 2023.11.15 | 0 | 130 |
11 |
11. error.html
vita
|
2023.11.15
|
추천 0
|
조회 123
|
vita | 2023.11.15 | 0 | 123 |
10 |
10. main.css
vita
|
2023.11.15
|
추천 0
|
조회 119
|
vita | 2023.11.15 | 0 | 119 |