
myHomeSelect.jsp
// 페이징 기능
var pagingStr = '';
pagingStr += '<div class="paging">';
// 글이 있나 없나
if (totalReplys != 0) {
// 맨 처음으로 이동
if (section > 1 && pageNum > 10) {
pagingStr += '<a href="#" onclick="updatePage(' + 1 + ',' + 1 + ')"> ◀◀ </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) + ')"> ◀ </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) + ')"> ◀ </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) + ')"> ▶ </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 + ')"> ▶▶ </a>';
}
if ((totalPages % 10) != 0) {
sectionCheck = Math.floor((totalPages / 10) + 1);
pagingStr += '<a href="#" class="pagingLink" onclick="updatePage(' + sectionCheck + ',' + totalPages + ')"> ▶▶ </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;
}