Tag Archives: 클래스

게시판용 페이징 클래스

게시판에서 쓸만한 페이징 클래스를 제작해 보았다. 문제 발견시 피드백 부탁드립니다^^

1342418818.txt
—————————————————————————————
페이징 클래스 소스코드 :
—————————————————————————————
[code]public class PageNavigation {
   
    private        boolean        isPrevPage;
    private        boolean        isNextPage;
    protected    int            nowPage;
    protected    int            rowTotal;
    protected    int            blockList;
    protected    int            blockPage;
    private        int            totalPage;
    private        int            startPage;
    private        int            endPage;
    private        int            startRow;
    private        int            endRow;
   
    // 페이지를 계산하는 생성자
    public PageNavigation(int nowPage, int rowTotal, int blockList, int blockPage) {
        super();
       
        // 각종 플래그를 초기화
        isPrevPage = false;
        isNextPage = false;
       
        // 입력된 전체 열의 수를 통해 전체 페이지 수를 계산한다
        this.totalPage    = (int) Math.ceil((double)rowTotal / (double)blockList);
       
        // 현재 페이지가 전체 페이지수보다 클경우 전체 페이지수로 강제로 조정한다
        if(nowPage > this.totalPage)
        {
            nowPage = this.totalPage;
        }
       
        // DB입력을 위한 시작과 종료값을 구한다
        this.startRow    = (int) (nowPage – 1) * blockList;
        this.endRow        = (int) this.startRow + blockList – 1;
       
        // 시작페이지와 종료페이지의 값을 구한다
        this.startPage    = (int) ((nowPage – 1) / blockPage) * blockPage + 1;
        this.endPage    = (int) this.startPage + blockPage – 1;
       
        // 마지막 페이지값이 전체 페이지값보다 클 경우 강제 조정
        if(this.endPage > this.totalPage)
        {
            this.endPage = totalPage;
        }
       
        // 시작 페이지가 1보다 클 경우 이전 페이징이 가능한것으로 간주한다
        if(this.startPage > 1)
        {
            this.isPrevPage = true;
        }
       
        // 종료페이지가 전체페이지보다 작을경우 다음 페이징이 가능한것으로 간주한다
        if(this.endPage < this.totalPage)
        {
            this.isNextPage = true;
        }
       
        // 기타 값을 저장한다
        this.nowPage = nowPage;
        this.rowTotal = rowTotal;
        this.blockList = blockList;
        this.blockPage = blockPage;
    }
   
    public void Debug()
    {
        System.out.println(“Total Page : ” + this.totalPage + ” / Start Page : ” + this.startPage + ” / End Page : ” + this.endPage);
        System.out.println(“Total Row : ” + this.rowTotal + ” / Start Row : ” + this.startRow + ” / End Row : ” + this.endRow);
    }
   
    // 전체 페이지 수를 알아온다
    public int getTotalPage()
    {
        return totalPage;
    }
   
    // 시작 Row값을 가져온다
    public int getStartRow()
    {
        return startRow;
    }
   
    // 마지막 Row값을 가져온다
    public int getEndRow()
    {
        return endRow;
    }
   
    // Block Row 크기를 가져온다
    public int getBlockSize()
    {
        return blockSize;
    }
   
    // 시작페이지값을 가져온다
    public int getStartPage()
    {
        return startPage;
    }

    // 마지막 페이지값을 가져온다
    public int getEndPage()
    {
        return endPage;
    }
   
    // 이전페이지의 존재유무를 가져온다
    public boolean isPrevPage()
    {
        return isPrevPage;
    }
   
    // 다음페이지의 존재유무를 가져온다
    public boolean isNextPage()
    {
        return isNextPage;
    }
}[/code]

—————————————————————————————
서블릿(Controller) 소스코드 :
—————————————————————————————

[code]// 리스트를 가져온다
if(request.getParameter(“page”) == null)
{
    nowPage = 1;
}
else
{
    nowPage = Integer.parseInt(request.getParameter(“page”));
   
    if(nowPage < 1)
    {
        nowPage = 1;
    }
}

// 객체를 생성한다 (현재페이지, 전체글수, 페이지당표시할 글의수, 한번에 표시할 페이징블록수)   
PageNavigation pageNav = new PageNavigation(nowPage, rowTotal, 10, 5);

// 디버깅이 필요할시 사용한다. 안써도 됨
pageNav.Debug();

// 시작Row값과 종료Row값을 넣어 쿼리문을 작성한다
sql = “SELECT * FROM TableName ORDER BY no DESC LIMIT ” + pageNav.getStartRow() + “, ” + pageNav.getBlockSize();

// 뷰에게 넘길 값을 지정한다
request.setAttribute(“pageIsPrev”,    pageNav.isPrevPage());    // 이전페이지 블록의 존재유무
request.setAttribute(“pageIsNext”,    pageNav.isNextPage());    // 다음페이지 블록의 존재유무
request.setAttribute(“pageStart”,    pageNav.getStartPage());// 시작페이지 번호
request.setAttribute(“pageEnd”,        pageNav.getEndPage());    // 종료페이지 번호[/code]

—————————————————————————————
jsp(View) 소스코드(EL표기법, JSTL사용) :
—————————————————————————————
[code]<div>
    <center>
        <c:if test=”${pageIsPrev}”>
            <a href=”index.do?page=${pageStart – 1}”>prev</a>
        </c:if>
        <c:forEach var=”page” begin=”${pageStart}” end=”${pageEnd}”>
            <a href=”index.do?page=${page}”>[${page}] </a>
        </c:forEach>
        <c:if test=”${pageIsNext}”>
            <a href=”index.do?page=${pageEnd + 1}”>next</a>
        </c:if>
    </center>
</div>[/code]

—————————————————————————————
결과 :
—————————————————————————————
prev [11] [12] [13] [14] [15] next