댓글 페이징 다이어그램.drawio.png

댓글 페이징 다이어그램.drawio

myHomeSelect.jsp

            // 페이징 기능
            var pagingStr = '';
            pagingStr += '<div class="paging">';

            // 글이 있나 없나
            if (totalReplys != 0) {
            
            // 맨 처음으로 이동
            if (section > 1 && pageNum > 10) {
                pagingStr += '<a href="#" onclick="updatePage(' + 1 + ',' +  1 + ')">&nbsp; ◀◀ </a>';
            }
            
            
            // 뒤로 이동            
            var pageNumCheck = pageNum;
            
            if (section > 1 && pageNum > 10 && (pageNum % 10) == 0) {
            	pageNumCheck = Math.floor((pageNum / 10) - 1);
                pagingStr += '<a href="#" class="pagingLink" onclick="updatePage(' + (section - 1) + ',' +  (pageNumCheck * 10) + ')">&nbsp; ◀ </a>';
            }
            
            // 뒤로 이동 10으로 나누어 지지 않는 경우
            if ((section > 1 && pageNum > 10) && (pageNum % 10) != 0) {
            	pageNumCheck = Math.floor((pageNum / 10));
                pagingStr += '<a href="#" class="pagingLink" onclick="updatePage(' + (section - 1) + ',' +  (pageNumCheck * 10) + ')">&nbsp; ◀ </a>';
            }
            
         // 현재 페이지를 변수로 저장
            var currentPage = pageNum;

         // 페이지 출력
            var pagingStr = '<div class="pagingContainer">'; // 컨테이너 시작
            for (var page = startPage; page <= endPage; page++) {
                if (page === currentPage) {
                    pagingStr += '<span class="pagingLink active" onclick="updatePage(' + section + ',' + page + ')">' + page + '</span>';
                } else {
                    pagingStr += '<span class="pagingLink" onclick="updatePage(' + section + ',' + page + ')">' + page + '</span>';
                }
            }
            pagingStr += '</div>'; // 컨테이너 끝
            
            // 다음 섹션으로 이동
            if(page>=10 && page<=endPage){
            if ((page % 10) == 0 && (totalPages / 10) != section) {
            	pagingStr += '<a href="#" class="pagingLink" onclick="updatePage(' + (section + 1) + ',' +  (page + 1) + ')">&nbsp; ▶ </a>';
            }
            }
            
            // 맨 끝 페이지로 이동
            var sectionCheck = section;
            
            if(totalPages>10){
            if ((page % 10) == 0 && (totalPages / 10) != section) {
            	sectionCheck = Math.floor(totalPages / 10);
                pagingStr += '<a href="#" class="pagingLink" onclick="updatePage(' + sectionCheck + ',' +  totalPages + ')">&nbsp; ▶▶ </a>';
            }
            if ((totalPages % 10) != 0) {
            	sectionCheck = Math.floor((totalPages / 10) + 1);
                pagingStr += '<a href="#" class="pagingLink" onclick="updatePage(' + sectionCheck + ',' +  totalPages + ')">&nbsp; ▶▶ </a>';
            }
            }
            
           
            pagingStr += '</div>';
            
            $('#reply').append(pagingStr);
            }

ReplyController

// 댓글 조회
	@RequestMapping(value="/replyList.do", method= {RequestMethod.POST, RequestMethod.GET})
	@ResponseBody
	public void replylist(@RequestParam("boardMyhomeArticleNo") int boardMyhomeArticleNo,
						  @RequestParam(value="section", defaultValue = "1") int section, // section, pageNum 값이 없을 경우 1로 초기화 하기.
			              @RequestParam(value="pageNum", defaultValue = "1") int pageNum,
						  HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		// Map 생성해서 section, pageNum 넣어주기
		Map<String, Integer> paging = new HashMap<>();
		paging.put("section", section);
		paging.put("pageNum", pageNum);
		paging.put("boardMyhomeArticleNo", boardMyhomeArticleNo);
		
		List<ReplyDomain> replyList = replyService.replyList(paging); // 게시글 조회
				
		// 페이징 정보 불러오기
		replyDomain = replyService.pagingInfo(pageNum, boardMyhomeArticleNo);
				
		// JSON 객체 생성
	    JSONObject data = new JSONObject();		
	    int totalReplys = replyDomain.getTotalReplys();
	    data.put("totalReplys", totalReplys); // 총 글 수
	    System.out.println("totalReplys" + replyDomain.getTotalReplys());
	    
	    int totalPages = replyDomain.getTotalPages();
	    data.put("totalPages", totalPages); // 총 페이지 수
	    System.out.println("totalPages" + replyDomain.getTotalPages());	
	    
	    int startPage = replyDomain.getStartPage();
	    data.put("startPage", startPage); // 시작 페이지
	    System.out.println("startPage" + replyDomain.getStartPage());	
	    
	    int endPage = replyDomain.getEndPage();
	    data.put("endPage", endPage); // 끝 페이지
	    System.out.println("endPage" + replyDomain.getEndPage());	
				
	    data.put("replyList", replyList);
				
	    data.put("section", section);
	    System.out.println("section 받았니?" + section);	
	    
	    data.put("pageNum", pageNum);
	    System.out.println("pageNum 받았니?" + pageNum);	
	    
	    
	    System.out.println("댓글 리스트" + replyList);
	    System.out.println("가져오나?" + boardMyhomeArticleNo);
	    
	    // 응답 설정
	    response.setContentType("application/json"); // json타입으로
	    response.setCharacterEncoding("UTF-8"); // utf-8로 안하면 외계어 나옴.
	    response.getWriter().write(data.toString()); // 스트링 타입으로 변환해서 JSON 데이터 전송
	}	

ReplyServiceImpl

// 페이징 관련 정보
@Override
	public ReplyDomain pagingInfo(int pageNum, int boardMyhomeArticleNo) throws Exception{
				
		int totalReplys = totalReplys(boardMyhomeArticleNo); // 총 게시글 수
		int totalPages = (totalReplys/10)+1; // 총 페이지 수 151개라면 15페이지가 아닌 16페이지여야 하기때문에 +1 // 맨 앞 숫자를 임의 변경하면 페이지 조절해서 테스트 가능
		int pagePcs = 10; // 하단에 표시할 페이지 갯수
		int startPage = (pageNum/pagePcs)*pagePcs+1; // 현재 페이지가 5이면 0*10+1=1 // 20이면 2*10+1=21
		int endPage = startPage+pagePcs-1; // 1+10-1=10 // 20이면 21+10 =31
				
				
		// 이전 페이지로 돌아갈 경우와 10단위 페이지 설정임.
		totalPages = (totalReplys%10==0)? totalPages-1:totalPages; // 만약 10으로 나누어지는 갯수라면 1페이지를 추가할 필요가 없기 때문에 // 맨 앞 숫자를 임의 변경하면 페이지 조절해서 테스트 가능
		// 20이면                                     20           21
				
		endPage = (pageNum%10==0)? startPage-1:endPage; // 위와 같은 이유로 페이지번호가 10으로 나누어진다면 1페이지를 더해줄 필요가 없기 때문
		// 20이면                                      20            31     20이됨.
		startPage = (pageNum%10==0)? pageNum-10+1:startPage;
		// 20이면                                   20-10+1                21      11이됨.
				
		// 이로써 20으로 페이지 번호가 들어오게 되면 11부터 20까지 페이지를 표시하게 됨.
				
				
		// 토탈 페이지가 앤드 페이지 보다 크다면 페이지가 무한정 생성되고 존재해서는 안되는 일이기에 설정
		endPage = totalPages<endPage? totalPages:endPage;
		
		
		System.out.println("totalReplys" + totalReplys);
		System.out.println("totalPages" + totalPages);
		System.out.println("pagePcs" + pagePcs);
		System.out.println("startPage" + startPage);
		System.out.println("endPage" + endPage);
				
		return new ReplyDomain(totalReplys, totalPages, pagePcs, startPage, endPage);
				
	}

// 총 글 수 조회
	@Override
	public int totalReplys(int boardMyhomeArticleNo) throws Exception{
		int totalReplys = replyDAO.totalReplys(boardMyhomeArticleNo);
		return totalReplys;
	}

ReplyDAOImpl

// 댓글 조회
@Override
	public List<ReplyDomain> replyList(Map<String, Integer> paging) throws DataAccessException{
		return sqlSession.selectList("mapper.board.replyList", paging);
	}
	
// 총 글 수 조회
@Override
	public int totalReplys(int boardMyhomeArticleNo) throws DataAccessException{
		int totalReplys = sqlSession.selectOne("mapper.board.totalReplys", boardMyhomeArticleNo);
		return totalReplys;	
	}