[스프링 부트 쇼핑몰 프로젝트 with JPA] 8-2. [상품 관리] 상품 목록 페이지

2023. 10. 16. 18:22·Web & Android/스프링 부트 쇼핑몰 프로젝트 with JPA
이 내용은 스프링 부트 쇼핑몰 프로젝트 with JPA 책을 학습한 내용입니다.

1. 상품 목록 페이지 결과 화면

  • 상품 목록 테이블 부분, 하단 페이지 부분, 검색 조건 부분 존재

2. 상품 목록 페이지 View

  • "검색" 버튼을 클릭하면 조회할 페이지 번호를 다시 "0"으로 설정해서 조회해야함
  • 페이지 번호를 전달 받아 form에 설정된 검색 조건 값들을 초기화하여 QueryString으로 보내는 page() 함수
<!-- 사용자 스트립트 추가 -->
<th:block layout:fragment="script">
      <script th:inline="javascript">

            $(document).ready(function(){
								// 검색 버튼이 눌리면
                  $("#searchBtn").on("click",function(e) {
												// form 태그의 전송을 막음 (페이지 번호가 그대로 넘어갈 수 있음)
                        e.preventDefault();
                        page(0);  <!-- 페이지 0번으로 세팅 -->
                  });
            });

            function page(page){
                  var searchDateType = $("#searchDateType").val();
                  var searchSellStatus = $("#searchSellStatus").val();
                  var searchBy = $("#searchBy").val();
                  var searchQuery = $("#searchQuery").val();

                  location.href="/admin/items/" + page + "?searchDateType=" + searchDateType
                          + "&searchSellStatus=" + searchSellStatus
                          + "&searchBy=" + searchBy
                          + "&searchQuery=" + searchQuery;
            }

      </script>
</th:block>
  • 상품 목록 테이블 부분
  • ${items} 변수는 Controller 에서 전달 받은 Page 객체
  • .getContent() 메소드를 이용하여 Page 객체의 content 부분을 추출
<form th:action="@{'/admin/items/' + ${items.number}}" role="form" method="get" th:object="${items}">
            <table class="table">
                  <thead>
                  <tr>
                        <td>상품아이디</td>
                        <td>상품명</td>
                        <td>상태</td>
                        <td>등록자</td>
                        <td>등록일</td>
                  </tr>
                  </thead>
                  <tbody>
                  <tr th:each="item, status: ${items.getContent()}">
                        <td th:text="${item.id}"></td>
                        <td>
                              <a th:href="'/admin/item/'+${item.id}" th:text="${item.itemNm}"></a>
                        </td>
                        <!-- 아래 문장에서 품절, 판매중이 정확하게 나오지 않는 경우엔 밑에 문장으로 변경하기 -->
                        <!--<td th:text="${item.itemSellStatus == 0} ? '품절' : '판매중'"></td>-->
                        <td th:text="${item.itemSellStatus == T(kr.spring.item.constant.ItemSellStatus).SELL} ? '판매중' : '품절'"></td>
                        <td th:text="${item.createdBy}"></td>
                        <td th:text="${item.regTime}"></td>
                  </tr>
                  </tbody>
            </table>
  • 하단 페이지 부분
  • 페이지 객체의 페이지 index 는 0부터 시작, 페이지 표시 번호는 1부터 시작
  • th:with 을 통해서 변수값을 정의start (페이지 시작 번호) : ((현재 페이지번호 / 보여줄 페이지 수) * 보여줄 페이지수) + 1end (페이지 끝 번호) : start + (보여줄 페이지 수 - 1)페이지의 총 개수가 0개면 end = 1, start + (보여줄 페이지 수 - 1) 보다 작다면 end = 페이지 총 개수
  • 첫 페이지 또는 마지막 페이지면 class 식별자를 추가(classappend) 하여 disabled 적용
  • 현재 페이지이면 active 클래스 추가
  • 페이지 번호를 클릭하면 위에 존재하는 스크립트의 page() 함수 수행
<!-- 부트 스트랩 사용할 때 재사용 가능 -->
            <div th:with="start=${(items.number/maxPage)*maxPage + 1}, end=(${(items.totalPages == 0) ? 1 : (start + (maxPage - 1) < items.totalPages ? start + (maxPage - 1) : items.totalPages)})" >
                  <ul class="pagination justify-content-center">

                        <li class="page-item" th:classappend="${items.first}?'disabled'">
                              <a th:onclick="'javascript:page(' + ${items.number - 1} + ')'" aria-label='Previous' class="page-link">
                                    <span aria-hidden='true'>Previous</span>
                              </a>
                        </li>

                        <li class="page-item" th:each="page: ${#numbers.sequence(start, end)}" th:classappend="${items.number eq page-1}?'active':''">
                              <a th:onclick="'javascript:page(' + ${page - 1} + ')'" th:inline="text" class="page-link">[[${page}]]</a>
                        </li>

                        <li class="page-item" th:classappend="${items.last}?'disabled'">
                              <a th:onclick="'javascript:page(' + ${items.number + 1} + ')'" aria-label='Next' class="page-link">
                                    <span aria-hidden='true'>Next</span>
                              </a>
                        </li>
                  </ul>
            </div>
  • 검색 조건 부분
  • ${itemSearchDto} 객체와 매핑
				<div class="form-inline justify-content-center" th:object="${itemSearchDto}">
                  <select th:field="*{searchDateType}" class="form-control" style="width:auto;">
                        <option value="all">전체기간</option>
                        <option value="1d">1일</option>
                        <option value="1w">1주</option>
                        <option value="1m">1개월</option>
                        <option value="6m">6개월</option>
                  </select>
                  <select th:field="*{searchSellStatus}" class="form-control" style="width:auto;">
                        <option value="">판매상태(전체)</option>
                        <option value="SELL">판매</option>
                        <option value="SOLD_OUT">품절</option>
                  </select>
                  <select th:field="*{searchBy}" class="form-control" style="width:auto;">
                        <option value="itemNm">상품명</option>
                        <option value="createdBy">등록자</option>
                  </select>
                  <input th:field="*{searchQuery}" type="text" class="form-control" placeholder="검색어를 입력해주세요">
                  <button id="searchBtn" type="submit" class="btn btn-primary">검색</button>
            </div>

3. 검색 조건 적용 결과화면

저작자표시 비영리 변경금지 (새창열림)

'Web & Android > 스프링 부트 쇼핑몰 프로젝트 with JPA' 카테고리의 다른 글

[스프링 부트 쇼핑몰 프로젝트 with JPA] 10. 상세페이지  (0) 2023.10.16
[스프링 부트 쇼핑몰 프로젝트 with JPA] 9. 메인화면  (0) 2023.10.16
[스프링 부트 쇼핑몰 프로젝트 with JPA] 8-1. [상품 관리] 상품 목록 조회 Querydsl  (0) 2023.10.16
[스프링 부트 쇼핑몰 프로젝트 with JPA] 7. 상품 수정  (0) 2023.10.16
[스프링 부트 쇼핑몰 프로젝트 with JPA] 6-2. [상품 등록] Controller, Service, Repository  (0) 2023.10.15
'Web & Android/스프링 부트 쇼핑몰 프로젝트 with JPA' 카테고리의 다른 글
  • [스프링 부트 쇼핑몰 프로젝트 with JPA] 10. 상세페이지
  • [스프링 부트 쇼핑몰 프로젝트 with JPA] 9. 메인화면
  • [스프링 부트 쇼핑몰 프로젝트 with JPA] 8-1. [상품 관리] 상품 목록 조회 Querydsl
  • [스프링 부트 쇼핑몰 프로젝트 with JPA] 7. 상품 수정
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    Oracle
    JPA
    spring
    시큐리티
    프로그래머스
    CS지식
    리눅스
    Java
    postgresql
    자바
    스프링부트
    baekjoon
    pcce 기출문제
    backjoon
    스프링 부트 쇼핑몰 프로젝트 with JPA
    리눅스마스터 1급
    Spring Security
    백준
    Flutter
    programmers
    스프링
    springboot
    DB
    데이터
    python
    CS
    Linux
    플러터
    데이터베이스
    리눅스마스터
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[스프링 부트 쇼핑몰 프로젝트 with JPA] 8-2. [상품 관리] 상품 목록 페이지
상단으로

티스토리툴바