[DDORI'S HOUSE]ページング処理、ユーザ養子縁組申請ステータスボード実施

52907 ワード

一時
2022.01.04 ~ 2022.01.05
プロジェクトの概要

  • テーマ:放浪犬の養子縁組とスポンサーサイト

  • プロジェクト名(サイト名)&チーム名:DDORI'S HOUSE

  • 実施内容(目標):登録/会員入力、マイページ(ユーザー)、マイページ(管理者)、各種掲示板(公告事項、ワンちゃんリスト、フリー掲示板、養子縁組後期など)、ショッピングモール(販売、決済システム)、マッチングシステム(質問に答えることで適切なタイプにマッチ)

  • ナビゲーション配置:about(各種紹介と公告事項)、採用(子犬リスト、子犬マッチング)、寄付(スポンサーガイド、物品販売)、ボランティア(サービスガイド公告欄)、コミュニティ(養子縁組後期、自由公告欄)、連絡(来路、連絡など)、login/join(登録、会員加入、私のページなど)

  • ロール:DB管理(モデリングとテーブル、列など)、ナビゲーションバー、login/join、mapage
  • ブルーマウスの進行現状第3弾!!!
    ★ Mypage (USER)
    1)養子縁組申請の作成状況jsp
    2)DB関連の養子縁組申請状況を出力する
    3)ページング
    4)即時現状表示(SearchType:養子縁組申請書を確認中、養子縁組を受け、養子縁組を拒否)処理
    実装画面

    ★Mypage


    1)ユーザ養子縁組申請状況jspの作成


    2)DB関連の養子縁組申請状況を出力する


    (listオブジェクトを使用する)養子縁組申請の配布に使用するxmlの作成

    <select id="adoptList" parameterType="com.icia.web.model.Adopt" resultMap="adoptNowResultMap">
    SELECT
        ADT_SEQ,
        USER_ID,
        DOG_SEQ,
        ADT_PERIOD,
        ADT_REASON,
        ADT_HOME,
        ADT_AGREE,
        ADT_PET,
        REG_DATE,
        ADT_STATUS,
        DOG_NAME
    FROM(
        SELECT
        ROWNUM AS RNUM,
        ADT_SEQ,
        USER_ID,
        DOG_SEQ,
        ADT_PERIOD,
        ADT_REASON,
        ADT_HOME,
        ADT_AGREE,
        ADT_PET,
        REG_DATE,
        ADT_STATUS,
        DOG_NAME
    FROM(
    SELECT
        A.ADT_SEQ AS ADT_SEQ,
        NVL(A.USER_ID, '') AS USER_ID,
        NVL(A.DOG_SEQ, '') AS DOG_SEQ,
        NVL(A.ADT_PERIOD, '') AS ADT_PERIOD,
        NVL(A.ADT_REASON, '') AS ADT_REASON,
        NVL(A.ADT_HOME, '') AS ADT_HOME,
        NVL(A.ADT_AGREE,'') AS ADT_AGREE,
        NVL(A.ADT_PET, '') AS ADT_PET,
        NVL(TO_CHAR(A.REG_DATE, 'YYYY.MM.DD'), '') AS REG_DATE,
        NVL(A.ADT_STATUS, '') AS ADT_STATUS,
        NVL(B.DOG_NAME, '') AS DOG_NAME
    FROM
        TBL_ADOPT A, TBL_DOG B
    WHERE 
        A.DOG_SEQ = B.DOG_SEQ
    AND 
         A.USER_ID = #{userId}
     
    <if test='searchType != null and searchType !="" '>
    <choose>
    <when test='searchType == "B"'>
    AND
       ADT_STATUS = 'B'
    </when>
    <when test='searchType == "Y"'>
    AND
       ADT_STATUS = 'Y'
    </when>
    <when test='searchType == "N"'>
    AND
       ADT_STATUS = 'N'
    </when>
    </choose>
    </if>   
    ORDER BY ADT_SEQ ASC))
    WHERE RNUM <![CDATA[>=]]> #{startRow}
    AND RNUM <![CDATA[<=]]> #{endRow}
    </select>

    (listオブジェクトを使用する)daoを作成して養子縁組申請状況を配布

    	//★★ 입양신청 리스트
    	public List<Adopt> adoptList(Adopt adopt);

    (listオブジェクトを使用します)養子縁組申請を送信するサービスの作成

       //★★ 입양현황  리스트
       public List<Adopt> AdoptList(Adopt adopt)
       {
          List<Adopt> list = null;
          
          try
          {
             list = adoptDao.adoptList(adopt);
          }
          catch(Exception e)
          {
             logger.error("[AdoptService] dogList Exception", e);
          }
          
          return list;
       }

    (listオブジェクトを使用します)養子縁組申請状況を配布するモデルを作成します(宣言、初期化、get+setの追加)


    (投稿数を含むオブジェクト)養子縁組申請総数のxmlを作成する

    <select id="adoptListCount" parameterType="String" resultType="long"> 
    SELECT
        COUNT(ADT_SEQ) AS CNT
    FROM
        TBL_ADOPT
    WHERE 
        USER_ID=#{value}
    </select>

    (投稿数を含むオブジェクトを使用する)daoを作成して、養子縁組申請の合計数を完了します。

    	//★★ 입양신청 총 수 시작
    	public long adoptListCount(String cookieUserId);

    (投稿数を含むオブジェクトを使用します)養子縁組申請の合計数に使用できるサービスを作成します。

       //★★ 입양신청 총 수
       public long adoptListCount(String cookieUserId)
       {
          long count = 0;
          
          try
          {
             count = adoptDao.adoptListCount(cookieUserId);
          }
          catch(Exception e)
          {
             logger.error("[AdoptService] adoptListCount Exception", e);
          }
          
          return count;
       }

    (投稿数を含むオブジェクトを使用する)養子縁組申請の合計数を計算するモデルを作成する->追加する必要はありません


    3)ページング


    adopting.jspでページングに必要なタグを作成する

       <div class="row mt-5">
          <div class="col text-center">
             <div class="block-27">
                <ul style="padding: 15px;">
                   <c:if test="${!empty paging}">
                      <c:if test="${paging.prevBlockPage gt 0}">
                         <li><a href="javascript:void(0)" onclick="fn_list(1)">&lt;&lt;</a></li>
                         <li><a href="javascript:void(0)"
                            onclick="fn_list(${paging.prevBlockPage})">&lt;</a></li>
                      </c:if>
                      <c:forEach var="i" begin="${paging.startPage}"
                         end="${paging.endPage}">
                         <c:choose>
                            <c:when test="${i ne curPage}">
                               <li><a href="javascript:void(0)" onclick="fn_list(${i})">${i}</a></li>
                            </c:when>
                            <c:otherwise>
                               <li class="active"><a href="javascript:void(0)">${i}</a></li>
                            </c:otherwise>
                         </c:choose>
                      </c:forEach>
                      <c:if test="${paging.nextBlockPage gt 0}">
                         <li><a href="javascript:void(0)"
                            onclick="fn_list(${paging.nextBlockPage})">&gt;</a></li>
                         <li><a href="javascript:void(0)"
                            onclick="fn_list(${paging.totalPage})">&gt;&gt;</a></li>
                      </c:if>
                   </c:if>
                </ul>
             </div>
          </div>
       </div>

    (listオブジェクトを使用する)養子縁組申請状況を配布する+(投稿数を含むオブジェクトを使用する)養子縁組申請総数のcount行+ページング処理可能なcontrollerを作成する

    	//페이지 처리할 상수 추가
    	private static final int LIST_COUNT = 3;		//한 페이지의 게시물 수
    	private static final int PAGE_COUNT = 5;		//페이징 수
        
        //★★입양신청현황 리스트
        @RequestMapping(value="/user/adoptIng")
        public String adoptList(ModelMap model, HttpServletRequest request, HttpServletResponse response)
        {
           String cookieUserId = CookieUtil.getHexValue(request, AUTH_COOKIE_NAME);
          //조회항목(B:확인중, Y:입양승인, N:입양거절)
          String searchType = HttpUtil.get(request, "searchType", "");
          
          //현재 페이지
          long curPage = HttpUtil.get(request, "curPage", (long)1);
          //게시글 수를 담기 위한 객체
          long totalCount = 0;
          //리스트에 띄울 내용을 list로 받기 위한 게시물 리스트 객체
          List<Adopt> list = null;
          //페이징 객체
          Paging paging = null;
          //조회 객체
          Adopt search = new Adopt();
          //관리자 여부
          User user = null;
          
          //view에서 넘어온 searchType과 searchValue과 값이 있는지 확인하여 있으면 조회 객체에 값을 넣어줌
          if(!StringUtil.isEmpty(searchType))
          {
             search.setSearchType(searchType);
    
          }
          else   //없으면 그냥 ""처리
          {
             searchType = "";
          }
          //서비스에 생성한 조회객체를 넘겨서 게시글 수 조회(여기서 만약 searchType과 searchValue가 없다면 전체 게시글 수, 있다면 해당 타입과 밸류에 맞는 게시글 수만 조회)
          totalCount = adoptService.adoptListCount(cookieUserId);
          
          user = userService.userSelect(cookieUserId);
          
          logger.debug("totalCount : " + totalCount);
          
          //실제 게시물이 존재할때
          if(totalCount > 0)
          {
             //페이징 처리 추가, 객체 생성시 생성자를 통해 페이징 처리까지 수행
             paging = new Paging("/user/adoptIng", totalCount, LIST_COUNT, PAGE_COUNT, curPage, "curPage");
             
             paging.addParam("searchType", searchType);
             paging.addParam("curPage", curPage);
             
             search.setStartRow(paging.getStartRow());
             search.setEndRow(paging.getEndRow());
             search.setUserId(cookieUserId);
             
             //실제 각 게시물 별 정보를 담은 Dog 객체를 list 객체에 담음
             list = adoptService.AdoptList(search);
           
          }
          
          logger.debug("list : " + list);
          
          //view 페이지로 넘길때 이용할 수 있게 각 키별로 값을 담아줌
          model.addAttribute("list", list);
          model.addAttribute("searchType", searchType);
          model.addAttribute("curPage", curPage);
          model.addAttribute("paging", paging);
          model.addAttribute("user", user);
          model.addAttribute("totalCount", totalCount);
          
          return "/user/adoptIng";
       }

    4)即時現状表示(SearchType:養子縁組申請書を確認中、養子縁組を受け、養子縁組を拒否)処理


    adopting.jspでのJSTL<c:choose>、<c:when>の使用

             <div class="col-md-9">
                <section class="ftco-section">
                   <div class="container">
                      <div class="row">
                         <div class="col-lg-9 pr-lg-4">
                            <div class="row">
                               <c:if test="${totalCount gt 0}">
                                  <c:forEach var="dog" items="${list}" varStatus="status">
                                     <div class="col-md-6 col-lg-4 ftco-animate">
                                        <div class="project">
                                           <div class="img">
                                              <a href="javascript:void(0)"
                                                 onclick="fn_view(${dog.adtSeq})"><img
                                                 src="/resources/images/dog/${dog.dogSeq}.jpg"
                                                 class="img-fluid" alt="Colorlib Template"
                                                 style="width: 300px; height: 250px;"></a>
                                           </div>
                                           <div class="text">
                                              <h3 class="fontsss">
                                                 <a href="javascript:void(0)"
                                                    onclick="fn_view(${dog.adtSeq})">${dog.dogName}</a>
                                              </h3>
                                           </div>
                                           <a href="/resources/images/dog/${dog.dogSeq}.jpg"
                                              class="icon image-popup d-flex justify-content-center align-items-center">
                                              <span class="icon-expand"></span>
                                           </a>
                                           <div class="col-md-9 ftco-animate pb-4"
                                              style="margin: 0; padding: 0;">
                                              <p>
                                                 <a href="javascript:void(0)"
                                                    onclick="fn_view(${dog.adtSeq})"
                                                    class="btn btn-black py-2 px-4"> <c:choose>
                                                       <c:when test="${dog.adtStatus eq 'B'}"> 신청서 확인중 </c:when>
                                                       <c:when test="${dog.adtStatus eq 'Y'}"> 입양승인 </c:when>
                                                       <c:when test="${dog.adtStatus eq 'N'}"> 입양거절 </c:when>
                                                    </c:choose>
                                                 </a>
                                              </p>
                                           </div>
                                        </div>
                                     </div>
                                     <input type="hidden" name="adtSeq${dog.adtSeq}"
                                        id="adtSeq${dog.adtSeq}" value="${dog.adtSeq}" />
                                  </c:forEach>
                               </c:if>
                            </div>
                         </div>
    
                      </div>
                   </div>
                </section>
                <!--★★입양신청이나 입양완료 X 경우 -->
                <div class="container">
                   <div class="col-md-12">
                      <div class="row">
                         <div class="col-md-9">
                            <c:if test="${totalCount eq 0}">
                               <div>
                                  <img src="/resources/images/noAdopt.jpg"
                                     style="width: 1500px; height: 500px;">
                               </div>
                               <br>
                               <div class="project">
                                  <h4 class="fontss3 text-center"><b>입양신청이나 입양완료 이력이 없어요...</b></h4>
                                  <!-- Buttons -->
                                  <div class="text-right">
                                     <p>
                                        <a href="/adopt/dogList" class="btn btn-black py-2 px-4 fontssss">또리보러가기</a>
                                     </p>
                                  </div>
                               </div>
                            </c:if>
                         </div>
                         <div class="col-md-3"></div>
                      </div>
                   </div>
                </div>
             </div>